更好地理解C语言指针(1)

一、定义
int a;//定义一个整型变量a,为int类型。
int *p;//定义一个整型指针变量p,为int* 类型。

ap都是能存储数据的变量,
只不过a存的是-1,0,1,2,3这种类型的整型数据,
p可以存储的是 0x000001 , 4216521532 这种地址数据,这些地址数据是其他变量的地址值。( 因为没有赋值,现在还没有值或是随机值 )

每一个你定义的变量在内存中是有地址的,地址可以用一串数据表示,指针就可以存储这些数据(用普通变量存储也行,但无意义)

二、赋值
p=&a;

众所周知,&a是取a的地址,所以把这个地址赋值给p,现在p存储的是0x000001,4216521532这种地址,在我电脑上p存的数据为6422036。

如下面程序所示,单独打印p,就可以显示p中所存储a地址数据

int *p;
int a;
a = 1;
p = &a;
printf("%d", p);// 6422036
三、*p

对于加了 *号的p就不一样了,*p 表示p存的地址数据对应的这个变量,即6422036地址上的变量,那么是哪个变量的地址是6433036呢,显然是a,所以*p 就是a。

int *p;
int a;
a = 1;
p = &a;
printf("p=%d\n", p);
printf("*p=%d\n", *p);
/*
p=6422036
*p=1
*/
四、指针为什么强大

对于直接存取变量地址,接近底层,加快了程序的速度
数组,函数,结构体等数据类型不能直接当作函数的参数传递,极大地限制了我们的发挥,但你可以把这些变量的地址传进去,然后用指针操作它们,简单灵活,岂不美哉?
比如:传数组
int16 fun1(int *dat, int *a, int *dat2)//传三个地址进来,赋值给指针变量
假设c[3]={0,0,0},d[3]={1,1,1};
可以用如下方法调用函数:
fun1(c,&a,d)// 数组名称即代表数组首地址,a是上述说的一个int变量

五、最后

有什么疑惑欢迎留言,互相学习并在之后的文章补充。

猜你喜欢

转载自blog.csdn.net/weixin_52013159/article/details/126196087