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

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

3天内不再提示

C语言数组和指针的区别

冬至子 来源:嵌入式老林 作者:嵌入式老林 2023-05-30 10:55 次阅读

一、数组和指针的介绍

指针是一个变量,它存储了一个内存地址,该地址指向一个变量的存储位置。通过指针,可以访问和修改指向的变量。数组是一个由相同数据类型元素组成的集合,可以通过索引来访问和修改这些元素。

二、两者之间的区别

1,存储方式

数组:数组在内存中是连续存放的,开辟一块连续的内存空间。数组是根据数组的下进行访问的,数组的存储空间,不是在静态区就是在栈上。

指针:指针很灵活,它可以指向任意类型的数据。

指针p存储的是一个内存地址,这个地址指向的是某种类型变量的存储空间。如果要访问这个变量,需要使用指针运算符(*)来解引用指针,将指针所指向的地址转换为所指向的变量的值。指针的值也可以改变,通过指针运算符(&)获取变量的地址,然后将其赋给指针变量。

int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};  // 
int a = 10;
int* p = &arr[0];  // 数组下标访问第一个元素,取地址后是第一个元素的地址
//int* p = arr;  // 跟上面这行是等价的,数组名表示这个数组第一个数据的指针,此时数组和指针是“通用的”
p = &a;  // 指向a变量的地址,此时 *p取到的值就是a变量的值

2,赋值方式

同类型指针变量可以相互赋值,数组不行,只能一个一个元素的赋值或拷贝

3,占用空间大小

数组的大小取决于数组元素的类型和元素个数

数组所占存储空间的内存:sizeof(数组名)

数组的大小:sizeof(数组名)/sizeof(数据类型)

int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};  // 占40个字节
int* p = arr;  // 占4个字节(32位系统)
char c = 'A';
char* p2 = &c;  // 占4个字节(32位系统)

指针无论是什么类型,在32位平台是占4 byte,在64位平台是占8 byte

4, 可变性

数组的大小在定义时就已经确定,无法改变,而指针可以随时指向不同的变量,从而实现动态变化。

三、数组指针和指针数组的区别

指针数组 :首先是一个数组,只不过数组的每个成员是一个指针变量。

数组指针 :首先是一个指针,这个指针指向一个数组。

代码:

int *p1[10];  // 指针数组,[]的优先级大于*,p1是一个数组,数组的值是一个指针
int (*p2)[10];  // 数组指针

图片

对于指针数组,p1先和“[]”结合,构成一个数组的定义,数组名为p1,int *修饰的是数组的内容,即数组的每个元素。那么它本质是一个数组,这个数组里有10个指向int类型数据的指针。

对于数组指针,“()”的优先级比“[]”高,“*”和p2 构成一个指针的定义,指针变量名为p2,int 修饰的是数组的内容,即数组的每个元素。数组在这里并没有名字,是个匿名数组。那么它本质是一个指针,它指向一个包含10个int 类型数据的数组。

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

    关注

    38

    文章

    7150

    浏览量

    161998
  • C语言
    +关注

    关注

    180

    文章

    7530

    浏览量

    128763
收藏 人收藏

    评论

    相关推荐

    C语言数组名和指针

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

    C语言数组指针区别

    大家好,我是嵌入式老林,从事嵌入式软件开发多年,今天分享的内容是C语言数组指针区别,希望能对你有所帮助。
    发表于 07-11 12:40 278次阅读
    C<b class='flag-5'>语言</b><b class='flag-5'>数组</b>和<b class='flag-5'>指针</b>的<b class='flag-5'>区别</b>

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

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

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

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

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

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

    详谈数组指针区别与联系

    详谈数组指针区别与联系
    的头像 发表于 06-29 15:18 2.2w次阅读
    详谈<b class='flag-5'>数组</b>和<b class='flag-5'>指针</b>的<b class='flag-5'>区别</b>与联系

    指针数组数组指针区别

    这里我们区分两个重要的概念:指针数组数组指针
    的头像 发表于 06-29 15:30 1.9w次阅读
    <b class='flag-5'>指针</b><b class='flag-5'>数组</b>和<b class='flag-5'>数组</b><b class='flag-5'>指针</b>的<b class='flag-5'>区别</b>

    理解函数指针、函数指针数组、函数指针数组指针

    理解函数指针、函数指针数组、函数指针数组指针
    的头像 发表于 06-29 15:38 1.4w次阅读
    理解函数<b class='flag-5'>指针</b>、函数<b class='flag-5'>指针</b><b class='flag-5'>数组</b>、函数<b class='flag-5'>指针</b><b class='flag-5'>数组</b>的<b class='flag-5'>指针</b>

    C语言指针数组区别

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

    二维数组数组指针以及指针数组

    二维数组数组指针以及指针数组
    的头像 发表于 08-16 09:02 2260次阅读

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

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

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

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

    C语言数组元素的指针

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

    C语言中什么是指针数组

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

    数组指针不相同吗?数组指针有哪些区别

    数组就是指针指针就是数组,这样的言论在评论区看到不下于10次。
    的头像 发表于 12-13 16:34 358次阅读
    <b class='flag-5'>数组</b>和<b class='flag-5'>指针</b>不相同吗?<b class='flag-5'>数组</b>和<b class='flag-5'>指针</b>有哪些<b class='flag-5'>区别</b>