大家好,我是嵌入式老林,从事嵌入式软件开发多年,今天分享的内容是c语言数组和指针的区别,希望能对你有所帮助。
一、数组和指针的介绍
指针是一个变量,它存储了一个内存地址,该地址指向一个变量的存储位置。通过指针,可以访问和修改指向的变量。数组是一个由相同数据类型元素组成的集合,可以通过索引来访问和修改这些元素。
二、两者之间的区别
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 类型数据的数组。
差分信号的优缺点有哪些
干电池和锂电池的区别 锂电池电压为0如何激活?
解决软件开发四大痛点,飞算全自动软件工程平台带来新解法
LED日光灯驱动电源自制详解
使用STM32F103做CAN的收发通信
C语言数组和指针的区别
PACK气密性测试,PACK电池包气密性测试方案
如何选优质内存条 内存PCB要求更严格
美国对华为“临时许可”延长90天 华为回应美国没有改变打压中国高科技公司实质
请问模拟信号长距离传输时有衰减怎么解决?
什么是ArcoWork
关于MDT推Z轴TMR传感器的性能分析和应用介绍
东芝开发出SoC省电技术,工作中也能深度休眠
40G,40G是什么意思
通用Cruise获50亿美元的投资,全力研发无人驾驶出租车业务
回顾第十一届中国制造业MES应用年会内容和介绍
河南省5G产业发展行动方案为5G应用孵化和产业落地提供了良好的机会
无桥Boost PFC电路的EMI实例分析
华为物联网操作系统 LiteOS内核教程03-任务管理
设计素养对前端工程师的重要性