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

    文章

    7528

    浏览量

    128429
  • 编程
    +关注

    关注

    88

    文章

    3439

    浏览量

    92375
  • 指针
    +关注

    关注

    1

    文章

    473

    浏览量

    70361
  • 数组
    +关注

    关注

    1

    文章

    409

    浏览量

    25593
  • sizeof
    +关注

    关注

    0

    文章

    9

    浏览量

    6420
收藏 人收藏

    评论

    相关推荐

    C语言数组名指针

    指针是C/C++语言的特色,而数组名指针有太多的相似,甚至很多时候,数组名可以作为指针使用。于
    发表于 08-27 17:48 604次阅读

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

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

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

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

    闷骚程序猿的干货之一:C语言数组指针和地址的异同

    ,这是一个int类型的数组,该数组10个元素,每个元素都是一个int类型的变量。array是这个数组数组名,但同时array也是该
    发表于 07-23 00:07

    C Primer Plus》读书笔记——数组指针(1)

    背景此章笔记以读者简单的C语言基础,对数组(array)、指针(pointer)初步了解及应
    发表于 02-07 15:15

    C语言——指针数组和函数

    C语言——指针数组和函数基本解释   1、指针的本质是一个与地址相关的复合类型,它的值是数据存放的位置(地址);
    发表于 04-20 15:25

    C语言教程(算法、数组、函数、指针)全方位讲解PPT合集

    。做任何事情都要有一定的步骤。  计算机算法--计算机能够执行的算法。  计算机算法的分类:  数值运算算法:求解数值;  非数值运算算法:事务管理领域。本文档的主要内容详细介绍的是C语言教程之数组
    发表于 10-16 14:12

    C语言运算符优先级(超详细)

    名称或含义使用形式结合方向说明1[]数组下标数组名[常量表达式左到右--()圆括号(表达式)/函数名(形参表)--.成员选择(对象)对象.成员--->成员选择(指针)对象
    发表于 04-27 16:47

    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次下载
    C<b class='flag-5'>语言中指针</b>与<b class='flag-5'>数组</b>

    C语言指针数组的区别

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

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

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

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

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

    C语言数组元素的指针

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

    C语言中什么是指针数组

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

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

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