指针
指针:指针用来保存地址,地址是一个数字。(左值代表空间里的值,右值代表空间里的内容)
解引用运算符 *(后跟一个指针名或者地址时,*给出储存在指针指向地址上的值)
地址运算符 &
< 例:&num1 表示变量num1的地址
ptr=&num1;//指向num1的指针
num1=22;
val=*ptr;//把ptr指向地址上的值赋给val
>
例: int *p;定义一个指针变量p,类型是int*,p指向一个int类型的数据。
p=&a;指针的绑定。
*p=23;指针解的引用。
<int *p1=&a 定义指针并初始化,同等于:int *p,a; p=&a;>
注:可变数组的定义:
int *p;
int n;
printf("输入数组的长度n:\n");
scanf("%d",&n);
p=(int *)malloc(sizeof(int )*n);
野指针:
例:int *p;
危害:①直接指向内核区。
②指向可用也没有别的数据区域
③最危险,可用但有别的数据
指针操作
①指针和整数相加:可以使用+运算符把指针与整数相加,或者整数与指针相加。无论那种情况,整数都会和指针所指向的类型的大小相乘,然后把结果与初始地址相加。例如:ptr1+4与&ptr1[4]等价。
②递增指针:递增指向数组元素的指针可以让该指针移动至数组的下一个元素。因此ptr1++相当与把ptr1的值加上4(int *ptr1;)
③指针减去一个整数:可以使用 - 运算符从一个指针中减去一个整数,指针必须是第一个运算对象,整数是第二个运算对象。该整数将乘以指针指向类型的大小,然后用初始地址减去乘积。
④递减指针:递减指向数组元素的指针可以让该指针移动至数组的上一个元素。需注意越界问题
⑤指针求差:求差的指针指向同一个数组的两个不同的元素,通过计算求出两个元素之间的距离。差值的单位与数组类型的单位相同。
⑥比较:使用关系运算符可以比较两个指针的值,前提是两个指针都指向相同的类型的对象!