指针的使用场景实际上只有两种:即传递和偏移
指针的传递:
void change(int i)
{
i = 5;
}
int main()
{
int i = 10;
printf(“i=%d\n”, i);
change(i);
printf(“i=%d\n”, i);
return 0;
}
此时输出的结果并不是i=10 i=5
而是i=10 i=10
这是因为main函数和change函数的栈空间不同,即使改变了change函数中i的值,也改变不了main函数中i的值。
此时就需要用到指针的传递:
void change(int *i)
{
*i = 5;
}
int main()
{
int i = 10;
printf(“i=%d\n”, i);
change(&i);
printf(“i=%d\n”, i);
return 0;
}
这样就可以在change函数中改变main函数中的i的值。
指针的偏移
一般来说,我们把指针的加减称为指针的偏移,加就是向后偏移,减就是向前偏移,指针的乘除是无意义的。
PS:例如int a[5];
此时数组名a代表数组的起始地址,sizeof(a)=20
而如果写a+0,sizeof(a)就会等于4