在C语言的指针学习过程中,有这样的语句:
int a,*ip=&a;
于是有同学问:究竟是*ip=&a,还是ip=&a?
提出以上问题的原因是:在上面的语句中看到了*ip=&a 这样的写法,其实,这是因为这里是定义变量的语句中为ip初始化,*在这里是为了说明ip为一个指针变量,值是赋给ip的:
int a,*ip=&a;等价于:
int a,*ip;
ip=&a;
所以,赋地址值时是ip=&a;而不是*ip=&a;
如果认为上面的文字没说清楚,再继续:
假设有int a,*ip;语句,则在内存中分配了两块空间,再假设这两块空间的起始地址分别是1000和1200,则内存分配情况可看成如图所示情况。
再假设为变量a赋值为30,指针ip指向变量a,则用图表示为:
现在再说为ip赋值和为*ip赋值各自的作用:
(1)为ip赋值:需要赋一个整型变量(数组)的地址值,所赋值存储在图中第二个框中。
(2)为*ip赋值:需要赋一个整数值,所赋值存储在图中第一个框中。
现在能分清为ip和*ip赋值的区别了吗?
往期文章:
【C语言】9.选择法排序程序设计
【C语言】8.冒泡法排序程序设计
【C语言】7. C语言的转义字符
【C语言】6. 恼人的引号,到底要不要?
【C语言】5. 起名字的学问
【C语言】4. 为何总是一闪而过?
【C语言】3. 关于字符和ASCII的那些事
【C语言】2. 照抄的程序,怎么无法运行?
【C语言】1.安装C语言学习环境