打印
[技术问答]

数组与指针的区别?

[复制链接]
2779|50
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。指针可以随时指向任意类型的内存块。

(1)修改内容上的差别

1 char a[] = "hello";
2 a[0] = 'X';
3 char *p = "world"; // 注意p 指向常量字符串
4 p[0] = 'X'; // 编译器不能发现该错误,运行时错误
(2) 用运算符sizeof 可以计算出数组的容量(字节数)。sizeof(p),p 为指针得到的是一个指针变量的字节数,而不是p 所指的内存容量。C++/C 语言没有办法知道指针所指的内存容量,除非在申请内存时记住它。注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。

1 char a[] = "hello world";
2 char *p = a;
3
4 //计算数组和指针的内存容量
5 cout<< sizeof(a) << endl; // 12 字节
6 cout<< sizeof(p) << endl; // 4 字节
7
8 //数组作为函数参数传递
9 void Func(char a[100])
10 {
11     cout<< sizeof(a) << endl; // 4 字节而不是100 字节
12 }

使用特权

评论回复
沙发
sanfuzi| | 2024-1-4 16:11 | 只看该作者
数组是一种数据结构,它可以存储多个相同类型的数据元素。数组在内存中是连续存储的,可以通过索引访问其中的元素。数组的大小在编译时就已经确定,不能改变。

使用特权

评论回复
板凳
tifmill| | 2024-1-4 16:21 | 只看该作者
数组是用于储存多个相同类型数据的集合。例如,int a[5]定义了一个可以存储5个整数的数组。这个数组在运行时获取的内存与数组的大小和单个数据占用的空间有关。
指针是一个变量,它存储的是其它变量在内存中的地址。指针变量所指向的地址,然后加上偏移量,方可取得数值。指针可以指向任何内存空间,但不是任何内存空间都可以通过指针去访问(不能访问寄存器)。

使用特权

评论回复
地板
kkzz| | 2024-1-4 16:50 | 只看该作者
由于指针可以进行指针运算,因此指针可以用于动态数据结构,而数组通常用于固定数据量的数据结构。

使用特权

评论回复
5
sdCAD| | 2024-1-4 17:20 | 只看该作者
指针比数组更加灵活,因为指针可以指向任意类型的变量,而数组只能存储同一类型的数据。

使用特权

评论回复
6
linfelix| | 2024-1-4 17:49 | 只看该作者
数组:在编译时静态分配内存,大小在编译时就已经确定,可以是局部变量或全局变量。
指针:是动态分配内存的变量,其大小在编译时确定,但指向的内存是在运行时通过内存分配函数(如malloc)动态分配的。

使用特权

评论回复
7
belindagraham| | 2024-1-4 18:19 | 只看该作者
数组的内存空间通常在编译时确定,大小固定,而指针的内存空间可以在运行时动态分配和释放。

使用特权

评论回复
8
sdlls| | 2024-1-5 09:17 | 只看该作者
对于数组,sizeof运算符可以返回数组的大小(以字节为单位)。对于指针,sizeof运算符返回指针的大小(通常为4字节或8字节,取决于系统架构)。

使用特权

评论回复
9
ingramward| | 2024-1-5 09:55 | 只看该作者
数组和指针在C语言中都是重要的数据类型,但它们有着明显的区别。

使用特权

评论回复
10
mmbs| | 2024-1-5 16:36 | 只看该作者
指针可以进行指针运算,例如指针的加减操作,而数组无法进行这样的操作。

使用特权

评论回复
11
yeates333| | 2024-1-5 16:53 | 只看该作者
在使用指针时,需要特别注意内存的分配和释放,以避免内存泄漏。

使用特权

评论回复
12
dspmana| | 2024-1-5 17:09 | 只看该作者
数组是一种静态的数据结构,它的元素在内存中是连续存储的,而指针是一种动态的数据结构,它用于存储变量的地址。

使用特权

评论回复
13
1988020566| | 2024-1-5 17:43 | 只看该作者
数组是用于储存多个相同类型数据的集合,而指针则是存放变量的地址。

使用特权

评论回复
14
wwppd| | 2024-1-5 17:59 | 只看该作者
数组的任何一个下标的运算都等同于一个对应指针的运算。也就是说,它们都采用了地址加偏移量的方式进行数据的访问。

使用特权

评论回复
15
jimmhu| | 2024-1-5 18:18 | 只看该作者
数组和指针在C语言中有着不同的用途和特性

使用特权

评论回复
16
pentruman| | 2024-1-5 18:40 | 只看该作者
数组:数组是一个包含相同类型元素的集合,它们在内存中是连续存储的。声明数组时会一次性分配一块连续的内存空间来存储所有元素,如 int arr[5]; 定义了一个可以存储5个整数的数组。
指针:指针是一个变量,它存储的是另一个变量(包括数组元素)的内存地址。声明指针时只会分配存放地址所需的内存空间,例如 int *ptr; 定义了一个指向整型变量的指针。

使用特权

评论回复
17
sanfuzi| | 2024-1-5 19:51 | 只看该作者
数组指针本质上是一个指针,指向了一个数组;而指针数组本质上是一个数组,该数组中的每个元素都是一个指针。

使用特权

评论回复
18
lzbf| | 2024-1-5 20:21 | 只看该作者
数组在定义时会自动分配内存空间,而指针需要手动分配内存空间,可以使用malloc()或calloc()等内存分配函数。

使用特权

评论回复
19
pl202| | 2024-1-5 20:38 | 只看该作者
数组可以通过初始化列表或者逐个给每个元素赋值来初始化。一旦定义并分配了内存,数组的大小和位置就固定不变。

使用特权

评论回复
20
wilhelmina2| | 2024-1-5 20:55 | 只看该作者
数组使用时,可以通过索引来访问其元素。指针使用时,需要使用解引用运算符(*)来访问其指向的变量或内存块。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

246

主题

1885

帖子

5

粉丝