目录
理解指针:
指针所指向的时变量的地址,并且可以通过指针直接改变变量的值
例如:
#include<stdio.h>
int main()
{
int a = 0; //定义int型变量
int* p = &a; //定义int型指针并指向a的地址(&表示地址)
*p = 1; //p指针指向的地址的值赋值为1,相当于a=1
printf("%d\n", a);
return 0;
}
结果a = 1
首先:指针定义的类型必须与所指变量类型相同。如上图都为int型。
其次:定义指针可以理解为先int* p; 再p = &a; (p指向a的地址)这个也是正确书写,我上面写的就相当于把2个p融合为1个p来书写。
最后:*p是等于a的值,就是*p == a;所以*p改变,a的值也要改变。
真正奥义:
-
普通函数换值
在没指针情况下在函数中改变传递变量值
#include<stdio.h> void hanshu(int b) //函数解释 a传值给b { b = 1; //在函数中使b赋值为1 } int main() { int a = 0; hanshu(a); //函数调用 printf("%d\n", a); return 0; }
结果:a = 0
-
用指针在函数里换值
依然是传变量,在函数里再用指针
#include<stdio.h>
void hanshu(int b) //函数传值给b
{
int* p = &b; //指针p指向b的地址
*p = 1; //指针p指向b的地址的值赋值为1
}
int main()
{
int a = 0;
hanshu(a); //函数调用
printf("%d\n", a);
return 0;
}
结果:a = 0;说明在函数中指针定义并不能改变main函数里的传值变量
* 3.用函数传地址给指针
#include<stdio.h>
void hanshu(int *p) //函数解释使a的地址传递给p(相当于指针p指向a的地址)
{
*p = 1; //指针p指向a的地址的值赋值为1
}
int main()
{
int a = 0;
hanshu(&a); //函数调用
printf("%d\n", a);
return 0;
}
结果:a = 1
总结:
1.可以看出,普通函数里换传递的值改变不了main函数里的变量的值
2.用函数传递地址,用指针接收可以在函数里改变main函数里的变量的值,这也是最重要的指针用法。