一.指针类型
指针有整形,浮点型,字符型等,但是不论哪种类型,指针的大小都是相同的
int main()
{
int* pa = 1;
char* pb = 2;
float* pc = 3;
printf("%d\n",sizeof(pa) );
printf("%d\n", sizeof(pb));
printf("%d\n", sizeof(pc));
return 0;
}
意义:不同类型的指针步长不同
int main()
{
int arr[5];
int* pa = arr;
char* pb = arr;
float* pc = arr;
printf("%p\n",pa );
printf("%p\n", pa+1);
printf("%p\n", pb);
printf("%p\n", pb+1);
printf("%p\n", pc);
printf("%p\n", pc+1);
return 0;
}
可以看出int型和float型能访问4个字节,char型访问1个字节
二.野指针
1.野指针指向的地址是未知的,随机的
2.成因:①指针定义时未初始化
②指针所指空间释放。
③指针越界访问(例如在数组中只有5个元素,指针指向第6个元素)
3.解决方法:①可以用空指针NULL初始化
②注意指向的空间在该函数内存在
③注意数组的范围
三.指针的运算
1.指针加(减)整数。如一中代码
2.指针减指针
int main()
{
int a[10];
printf("%d", &a[9] - &a[0]);
return 0;
}
指针相减得到的是两个指针之间元素的个数(指针也可以相加,但没什么意义)