【C语言进阶】数组名和指针使用sizeof有什么不同?
本文介绍一个比较常见的错误,是跟sizeof有关的,不知你是否有掌握呢?
1 问题说明大家都知道在C语言中,我们会使用sizeof来求一个变量的实际内存长度,那么如果是对数组名求sizeof,以及对一个指针求sizeof,它的结果有何不一样呢?
2 示例代码为此,简单写了一段测试代码:
复制 #include int main(int argc, const char *argv[]) { int a[10]; int *p = &a; printf(“sizeof(a) = %d\\n”, sizeof(a)); printf(“sizeof(p) = %d\\n”, sizeof(p)); return 0; } 3 代码解读代码其实很简单,先是定义了一个10个元素的整型数组,然后定义了一个指向整型类型的指针,并将指针指向数组a。
随后对a和p,分别使用sizeof来求大小。
我们来看一下运行结果:

从运行结果,我们可以知道,两者是完全不一样的。
sizeof(a),是求a数组的内存大小,理论上应该等于:10 乘以 一个整形数所占空间 = 40 字节;
而如果对指针p求sizeof,它用于等于运行机器上的指针大小,比如在32位机器上,这个值就是4字节;而我的测试机器是64位机器,所以其值为8字节。
4 总结sizeof求数组和指针是两个不同的操作,对数组它是求数组的整体内存大小,而对指针,其值用于等于机器的字长(即不同的机器有不同的测试结果)。
这个易犯错的知识点,你get到了吗?
友恒律师事务所-霍尔果斯站
友恒律师事务所-侯马站
友恒律师事务所-贺州站
友恒律师事务所-廉江站
友恒律师事务所-塔城站
友恒律师事务所-图们站
友恒律师事务所-子长站
友恒律师事务所-海林站
友恒律师事务所-三亚站
友恒律师事务所-临沧站
友恒律师事务所-东港站
友恒律师事务所-百色站
友恒律师事务所-德阳站
友恒律师事务所-高安站
友恒律师事务所-常宁站
友恒律师事务所-甘孜站
友恒律师事务所-黄山站
友恒律师事务所-吉首站
友恒律师事务所-上饶站
友恒律师事务所-永州站
友恒律师事务所-阿图什站
友恒律师事务所-安宁站
友恒律师事务所-渭南站
友恒律师事务所-通辽站
友恒律师事务所-中山站
友恒律师事务所-庆阳站
友恒律师事务所-娄底站
友恒律师事务所-那曲站
友恒律师事务所-吐鲁番站
友恒律师事务所-资阳站
友恒律师事务所-长沙站
友恒律师事务所-贵阳站
友恒律师事务所-满洲里站
友恒律师事务所-宿迁站
友恒律师事务所-儋州站
友恒律师事务所-枝江站
友恒律师事务所-张家港站
友恒律师事务所-钟祥站
友恒律师事务所-枣庄站
友恒律师事务所-射洪站
友恒律师事务所-根河站
友恒律师事务所-遵义站
友恒律师事务所-阿克苏站
友恒律师事务所-涿州站
友恒律师事务所-呼和浩特站
友恒律师事务所-广州站
友恒律师事务所-佛山站
友恒律师事务所-武夷山站
友恒律师事务所-防城港站
友恒律师事务所-珲春站
友恒律师事务所-珠海站
友恒律师事务所-荆州站
友恒律师事务所-太原站
友恒律师事务所-都江堰站
友恒律师事务所-鹤山站
友恒律师事务所-宁国站
友恒律师事务所-辛集站
友恒律师事务所-乌海站
友恒律师事务所-霸州站
友恒律师事务所-瑞昌站
友恒律师事务所-海宁站
友恒律师事务所-聊城站
友恒律师事务所-温岭站
友恒律师事务所-柳州站
友恒律师事务所-肥城站
友恒律师事务所-莱阳站
友恒律师事务所-池州站
友恒律师事务所-邹平站
友恒律师事务所-江门站
友恒律师事务所-开封站
友恒律师事务所-来宾站
友恒律师事务所-乐平站
友恒律师事务所-江油站
友恒律师事务所-安庆站
友恒律师事务所-巴中站
友恒律师事务所-梧州站
友恒律师事务所-晋中站
友恒律师事务所-浏阳站
友恒律师事务所-平果站
友恒律师事务所-陇南站
友恒律师事务所-泊头站
友恒律师事务所-佳木斯站
友恒律师事务所-邵武站
友恒律师事务所-伊宁站
友恒律师事务所-灯塔站
友恒律师事务所-鄂尔多斯站
友恒律师事务所-海北站
友恒律师事务所-延吉站
友恒律师事务所-江山站
友恒律师事务所-启东站
友恒律师事务所-重庆站
友恒律师事务所-广汉站
友恒律师事务所-北安站
友恒律师事务所-乐陵站
友恒律师事务所-高邮站
友恒律师事务所-宜昌站
友恒律师事务所-克孜勒苏站
友恒律师事务所-烟台站
友恒律师事务所-博乐站
友恒律师事务所-庐山站
免责声明:文章内容来自互联网,本站不对其真实性负责,也不承担任何法律责任,如有侵权等情况,请与本站联系删除。
转载请注明出处:【C语言进阶】数组名和指针使用sizeof有什么不同?-c语言指针数组定义和赋值的关系 https://www.yhzz.com.cn/a/7086.html