[方案相关] 数组和指针有着密切的关系,但语法和用法上有重要区别

[复制链接]
 楼主| 根特皇宫w 发表于 2024-2-24 21:12 | 显示全部楼层 |阅读模式
数组(Array)和指针(Pointer)是C语言中两个重要的概念,虽然它们在某些方面有相似之处,但在语法和用法上存在一些重要的区别。


内存分配:


数组: 在声明数组时,需要指定数组的大小,编译器会为整个数组分配一块连续的内存空间。
指针: 指针变量只存储一个内存地址,不会分配实际的内存空间。需要通过动态内存分配函数(如malloc)来为指针分配内存。
大小:


数组: 具有固定大小,一旦声明,大小通常不能改变。
指针: 没有固定大小,可以通过赋值给不同的地址来指向不同的内存块。
初始化:


数组: 可以在声明时进行初始化,也可以在之后进行逐个元素的初始化。
指针: 可以通过将地址赋给指针变量进行初始化。
使用:


数组: 使用下标访问数组元素,数组名表示数组的地址。
指针: 使用解引用操作符(*)访问指针指向的内存内容。
作为函数参数:


数组: 当数组作为函数参数传递时,实际上传递的是数组的首地址。
指针: 可以作为函数参数传递,传递的是指针变量的值(即地址)。
算术运算:


数组: 不支持指针算术运算,不能对整个数组进行加减操作。
指针: 可以进行指针算术运算,例如指针加减整数、比较等、、


示例代码:


  1. <font color="#000000">#include <stdio.h>

  2. int main() {
  3.     // 数组
  4.     int arr[5] = {1, 2, 3, 4, 5};
  5.     printf("Array: %d\n", arr[0]);

  6.     // 指针
  7.     int *ptr;
  8.     ptr = arr;  // 数组名即为数组的首地址
  9.     printf("Pointer: %d\n", *ptr);

  10.     return 0;
  11. }
  12. </font>
总的来说,数组和指针在C语言中有着密切的关系,但在语法和用法上存在一些重要的区别。理解这些区别有助于正确、安全地使用它们。

tpgf 发表于 2024-3-1 13:56 | 显示全部楼层
从使用角度来讲 数组更容易接受
xiaoqizi 发表于 2024-3-1 14:32 | 显示全部楼层
使用数组的话 预先占用的空间比较多
晓伍 发表于 2024-3-1 15:07 | 显示全部楼层
这两种类型如果操作不好的话 都会导致数据的误操作
磨砂 发表于 2024-3-1 19:14 | 显示全部楼层
无论是数组还是指针 只要类型确定了 大小也就确定了
木木guainv 发表于 2024-3-1 19:45 | 显示全部楼层
感觉数组的本质其实就是指针
wowu 发表于 2024-3-1 20:16 | 显示全部楼层
指针的应用应该更加灵活一些 但是相对来说难度大一点
ewge 发表于 2024-3-4 10:38 | 显示全部楼层
本帖最后由 ewge 于 2024-3-4 10:40 编辑

数组名就是指针吗
数组名就是指针吗?!也许大部分人会说是的,甚至一些教材或者C语言书籍也是这么说的,那么这些说法都是绝对不严谨的。的确,在大部分情况下数组名确实就是一个常量指针,例如:在进行数组元素访问的时候,我们都是通过先找到起始地址,再找到其偏移量才能够访问到我们的数组元素的,此时我们的数组名就可以被当做一个常量指针(数组首元素的地址),它的数值与&arr[0]是相等的;在一维数组进行函数传参时它传的也是数组名(常量指针)
但有俩种情况是除外的,所以出于严谨的说法,数组名并不就是指针

下面我们就来验证一下:
第一种情况:在sizeof中此时数组名为整个数组

来看一个例子:
  1. #include<stdio.h>

  2. int main()
  3. {
  4.         int arr[10] = { 0 };
  5.         printf("%zd\n", sizeof(arr));

  6.         return 0;
  7. }



arr数组有10个元素,每个元素的类型为int型,所以求出的大小为10 * 4 = 40,,而此时数组名为一个指针的话,那么在32位/64位平台下打印的应该是4 or 8,答案显然不是,所以证明此时数组名在sizeof中不是指针而是代表着整个数组。


LOVEEVER 发表于 2024-3-27 12:50 | 显示全部楼层
数组可以理解为目视化的指针
xdvca 发表于 2024-7-31 22:36 | 显示全部楼层
在实际编程中,数组适合处理固定大小的数据集合,而指针适合处理动态数据和复杂的数据结构。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

30

主题

147

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

30

主题

147

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部