C语言一个小小的问题引起的对指针的探究。。。

本文通过分析一个简单的C语言程序,详细解释了数组和指针的底层工作原理,包括数组地址传递机制及32位与16位编译环境的区别。文章深入浅出地阐述了指针构成的本质,以及不同编译环境下输出结果的差异,旨在帮助读者巩固C语言基础。

废话不多说。下面是这个大家认识的一个及其简单的程序:

 1 #include     <stdio.h>
 2 void A(int  a[])
 3 {
 4     printf("%d/t", sizeof(a));
 5 }
 6 int main()
 7 {
 8     int a[512];
 9     int *p;
10     printf("%d/t", sizeof(a));
11     A(a);
12     printf("%d/n", sizeof(p));
13     return 0;
14

这个程序大家先看一遍再拿到编译器里运行调试,发现什么了没?输出的是512       4(2)    4(2)。 我今天下午查了些资料,才知道了,原来是自己基础没掌握好,现在我就来解释下:

         第一个输出512,是因为它是一个数组,所以输出了整个数组所站的总共的内存字长大小。但为什么后面输出的是4呢???原来啊,编译器在对数组进行地址参数传递的时候,复制了内存地址,结果就使得数组直接变成指针了。。就是这个原因~但为什么输出的是4(2)呢???呵呵,这个就是指针的构成了,其实所有的指针都只是一个无符号的整形数。。我的编译环境是32位的linux。处理器寻址能力为2^32-1,相当于就是站了4个字节空间的大小。但在DOS(TC)环境下编译,由于dos是16位的,所以就只输出的2咯~~

 

posted on 2012-06-02 08:59 依旧涛 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/t-bruce-yu/archive/2012/06/02/2531544.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值