更好地理解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变量

五、最后

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值