*p表示指针p指向的数据,所以如果p指向a,那么修改*p的值自然也就是修改a的值。
在C语言里,基本变量存放的是数据,而指针变量是存放地址的变量(另一变量额地址)。在C语言中,指针也称之为地址,所以我们常说某某变量的指针,可以理解为某某变量的在内存中的地址。如:b变量的指针是1000,可以理解为b在内存中的地址是1000,注意不能理解为b的指针变量是1000(错误的理解)。
2、定义指针变量
在c语言指针的定义形式如下:
类型说明符*指针变量名
如:
int*p1,*p2;
//错误的定义方式
int*p1,p2;//p1整形指针,p2是整形变量
在c里,可以在变量前加&符号取得变量的地址,同样地,可以在指针变量前加*符号取得指针变量指向的变量的值(该内存地址上存放的数据),如:
int a=4;
int*p=&a;
printf("指针p指向的变量的值是%d\r\n",*p);//注意在这行代码里,p是指针,*p是指向的变量的值。
3、指针变量作为函数参数
//带有指针变量的函数定义形式如下
void fun(int*p1,int*p2)
//调用方式如
注:在被调用函数中,试图修改指针变量的值(即地址)来达到改变实参的目的都是错误的。
这句话如何理解呢?这里牵涉到一个比较容易混淆的问题-值传递和引用传递的区别。在这里提供一种理解方式,如下:将实参传给形参的时候,形参都是将实参的内容复制一遍,再调用相对应的函m