C指针的理解

1.指针的简单理解

首先我们来理解最简单的语句 int a = 1;

这一句看似只是在给a赋值,实际上还给a分配了内存。

我们再来看这个例子
int a;
scanf("%d",&a);
第一句是定义整型变量a,第二句是在给a赋值。我们注意到,在使用scanf()的时候出现了“&”符号,它和a在一起---->“&a”表示的是a的内存地址。
我们打个比方,把内存地址比作房间号,房间号对应的房间就是内存地址对应的内存。

指针就相当于房间管理员。

我们再来看这个例子
int a=1;//向系统申请了一个int型的房间房间里装的是数字1
int *p;//p表示管理int型房间的管理员,
p=&a;//管理员找到a房间的地址
*p=2;//*p可以表示房间内部的东西*p==a,把2塞入房间,把之前1丢出去
printf("%d",a);//此时a等于2;

2.较为复杂的例子:

<1>
int a[3];//向系统申请了3个连续的int型房间,房间里现在没东西;
int *p//p表示管理int型房间的管理员;
p=a;//这里为什么不用&a呢,因为数组名表示的是首地址。所以现在p站在开头的门牌号前
for(int i=0;i<3;i++)
{
*p=i;//向房间里塞int型数字;
p++//管理员走向下一个连续的房间.
}//这一小段可以给数组赋值。

<2>

int a[2][3];//向系统申请了2*3个int型房间,a表示首地址,即a[0][0]的房间号;这里说是二维数组,但是在管理员面前看作一维
int *p;//p表示管理int型房间的管理员
p=a;
for(int i=0;i<2*3;i++)
{
*p=i;//向房间里塞int型数字;
p++//管理员走向下一个连续的房间.
}//这一小段可以给数组赋值。

3.多级指针

之前介绍的都是一级指针,事实上指针也是有自己房间和房间号的而指针的房间里装的是指针正在访问的的房间号(内存地址)
<1>
int a[3];
int *p=a;//访问数组a首地址
int **q=&p;//访问p的地址
for(int i=0;i<3;i++)
{
*p=i;
(*q)++;//这里的*q表示p的房间,表示p正在访问的房间号,所以这一句就表示让p移动到下一个房间
printf("%d\n",**q);//这里的**q可以理解为*(*(q))即q所管理的p所管理的房间,即a[i];
}

这里这个例子简单的表示了多级指针的的好处,就是可以访问的东西更多。p只能去访问a数组,q又能访问p又能访问数字a,所以多级指针的运用还是很有必要的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值