C语言-(void*)类型指针
(void*)类型指针:ANSI新增的:即定义了一个指针,但不指定指向任何类型(即指向抽象的数据类型)。void
是空类型,只保存了指针的值,而丢失了类型信息
1 通过强制类型转换可将其值赋给另一指针变量
2.1用于动态存储函数的返回型指针 void malloc/calloc()
2.2也可用于函数 void*fun() //表示返回值是一个地址,指向空(抽象)数据类型
空指针NULL:不指向任何对象,不同于未初始化的野指针。
#ifdef __cplusplus #define NULL 0 #else #define NULL ((void *)0) #endif
数组与指针:数组所占存储空间的内存:sizeof(数组名)
数组的大小: sizeof(数组名)/sizeof(数据类型)
const 和 指针
- 指向常量的指针,值不能改变,指向可改变
- 常指针值能改变,指向不可改变
- 指向常量的常指针,都不能改变
#include <stdio.h> int main() { // 1 指向常量的指针:指向可变,值不能变可改变指针 const int a = 10; int e = 20; int *p = &a; p=&e; //可指向其它对象 //*p = 1000;//但指向&a后其值*a就不能变化 printf("*p = %d\n", *p); // 2 可改变指针 const b = 10; int *pb = &b; pb = p; printf("*pb = %d\n", *pb); // 3常指针 const c = 10; int * const pc = &c;//常指针指向一个对象后指向不能变 *pc = 1000; //但值可变(指向对象的值) //pc = pb;不能改变 //4指向常量的常指针 const d = 10; const * int const pd = &d; //*pd = 1000;都 不能改变 printf("\n"); return 0; }
深拷贝与浅拷贝:
浅拷贝即通过指针赋值的方法实现指向,但如果浅拷贝后要删除就会使另外对象中的指针就会无效,形成所谓的野指针,而访问无效指针是危险的。