1.数组和指针的区别
1)定义:
数组:数组是用于存储多个相同类型数据的集合.
指针:指针是一个变量,存放指向的变量的在内存中的地址
2)赋值方式
数组:逐个元素的赋值或者拷贝
指针:指针可以相互赋值
3)表示范围
数组:有效范围就是数组空间的范围,不能指向其他数组
指针:可指向任意变量地址,但是不能随意访问,必须在变量有效范围内
4)sizeof()
数组:
占用存储空间:sizeof(数组);
数组大小:sizeof(数组)/sizeof(数据类型)
指针:
32位系统,sizeof(指针)全是4;
64位系统:sizeof(指针)全是8
2.数组传参时会退化成指针
将整个数组拷贝一份传入函数时,将数组名看做常量指针,传数组首元素的地址
3.void类型指针
void* :空类型指针,只存储地址,丢失类型,故无法访问.要访问该值,必须类型转换,再间接引用指针;
其他类型指针都可隐式自动转换为void类型指针,void类型指针如果要转换成其他类型指针,必须强制转换
void*指针不允许算术运算
4.函数指针:指向函数的指针
函数指针的定义:
假如函数为 int abc(const void*a,const void*b);
函数指针可以定义为 int (*functionptr) (const void*,const void*);
赋值:functionptr = &abc;
调用函数(1)(*functionptr)(&x,&y);//x,y为int型变量
(2)functionptr(&x,&y);也可以调用函数