概述
一、定义
int a;//定义一个整型变量a,为int类型。
int *p;//定义一个整型指针变量p,为int* 类型。
a
和p
都是能存储数据的变量,
只不过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=%dn", p);
printf("*p=%dn", *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变量
五、最后
有什么疑惑欢迎留言,互相学习并在之后的文章补充。
最后
以上就是欣慰早晨为你收集整理的更好地理解C语言指针(1)的全部内容,希望文章能够帮你解决更好地理解C语言指针(1)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复