0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【C语言进阶】数组名和指针使用sizeof有什么不同?

嵌入式物联网开发 来源:嵌入式物联网开发 作者:嵌入式物联网开发 2022-10-03 17:53 次阅读

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来求大小。

我们来看一下运行结果:

image-20220930212558866

从运行结果,我们可以知道,两者是完全不一样的。

sizeof(a),是求a数组的内存大小,理论上应该等于:10 乘以 一个整形数所占空间 = 40 字节;

而如果对指针p求sizeof,它用于等于运行机器上的指针大小,比如在32位机器上,这个值就是4字节;而我的测试机器是64位机器,所以其值为8字节。

4 总结

sizeof求数组和指针是两个不同的操作,对数组它是求数组的整体内存大小,而对指针,其值用于等于机器的字长(即不同的机器有不同的测试结果)。

这个易犯错的知识点,你get到了吗?

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7597

    浏览量

    136130
  • 编程
    +关注

    关注

    88

    文章

    3587

    浏览量

    93585
  • 指针
    +关注

    关注

    1

    文章

    479

    浏览量

    70506
  • 数组
    +关注

    关注

    1

    文章

    414

    浏览量

    25905
  • sizeof
    +关注

    关注

    0

    文章

    9

    浏览量

    6435
收藏 人收藏

    评论

    相关推荐

    C语言数组名指针

    指针C/C++语言的特色,而数组名指针太多的相
    发表于 08-27 17:48 712次阅读

    C语言中指针数组数组指针的区别

    指针数组之间存在着紧密的关系。在本文中,我们将探讨指针数组的关系、指针算术和数组遍历、多维
    发表于 08-17 15:29 395次阅读

    从编译器角度分析C语言数组名指针的区别

    数组名却不可以,正如你可以骑走一辆自行车,但是不能骑走一棵树。另外,C语言数组下标改写成指针偏移量的根本原因是
    发表于 06-23 23:36

    C语言入门教程-用指针操作数组

    C语言入门教程 在C语言中,数组指针的关系十分密切。要想有效地使用
    发表于 07-29 12:18 1484次阅读

    C语言入门教学之数组资料总结免费下载

    本文档的主要内容详细介绍的是C语言入门教学之数组资料总结免费下载主要内容包括了:1 一维数组的定义和一维数组元素的引用2 一维
    发表于 10-23 17:53 5次下载
    <b class='flag-5'>C</b><b class='flag-5'>语言</b>入门教学之<b class='flag-5'>数组</b>资料总结免费下载

    指针数组都是C语言的精髓所在 两者何联系区别

    指针数组都是C语言的精髓所在,对于很多C程序员来说,如果你问这样一个问题:数组
    的头像 发表于 05-27 14:51 4064次阅读
    <b class='flag-5'>指针</b>和<b class='flag-5'>数组</b>都是<b class='flag-5'>C</b><b class='flag-5'>语言</b>的精髓所在 两者<b class='flag-5'>有</b>何联系区别

    C语言中指针数组

    #define SIZE 10int arry[SIZE]={0,1,2,3,4,5,6,7,8,9}; //数组名arry表示数组首元素的地址*int p,temp;//可直接初始化定义指针
    发表于 01-13 13:11 3次下载
    <b class='flag-5'>C</b><b class='flag-5'>语言中指针</b>与<b class='flag-5'>数组</b>

    C语言指针数组的区别

    C语言教程中我们使用通过数组名通过偏移和指针偏移都可以遍历数组,那么指针
    的头像 发表于 07-18 16:29 1899次阅读

    C语言进阶】“数组指针”和“指针数组”都是啥跟啥?

    C语言进阶】“数组指针”和“指针数组”都是啥跟啥?
    的头像 发表于 08-31 13:21 1882次阅读

    C语言进阶C语言指针的高阶用法

    C语言进阶C语言指针的高阶用法
    的头像 发表于 08-31 13:24 2274次阅读

    C语言中的char数组和char指针什么区别?

    让我们通过下面的例子,来了解 C语言中字符数组和字符指针之间的区别。
    的头像 发表于 01-29 16:35 2633次阅读

    C语言数组元素的指针

    C语言调用函数时虚实结合的方法都是采用“值传递”方式,当用变量名作为函数参数时传递的是变量的值,当用数组名作为函数参数时。 由于数组名代表的是
    的头像 发表于 03-10 14:45 831次阅读

    C语言中什么是指针数组

    C语言中一个数组,若其元素均为指针类型数据,称为指针数组,也就是说,
    的头像 发表于 03-10 15:26 1662次阅读

    C++数组名数组拷贝详解

    C++数组间赋值不能直接通过数组名称 randy = sesame进行,因为数组名并不是指针,大部分情况下,编译器会隐式转换为指向
    发表于 08-21 15:09 445次阅读
    <b class='flag-5'>C</b>++<b class='flag-5'>数组名</b>和<b class='flag-5'>数组</b>拷贝详解

    数组指针不能混用的情况

    指针的基本概念。数组是一组相同类型的元素的集合,而指针是一个变量,它存储了一个地址,该地址指向内存中的某个位置。在 C/C++ 中,
    的头像 发表于 12-07 13:46 569次阅读