根特皇宫w 发表于 2024-2-24 21:12

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

数组(Array)和指针(Pointer)是C语言中两个重要的概念,虽然它们在某些方面有相似之处,但在语法和用法上存在一些重要的区别。


内存分配:


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


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


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


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


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


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


示例代码:


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

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

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

    return 0;
}
</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是相等的;在一维数组进行函数传参时它传的也是数组名(常量指针)
但有俩种情况是除外的,所以出于严谨的说法,数组名并不就是指针

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

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

int main()
{
        int arr = { 0 };
        printf("%zd\n", sizeof(arr));

        return 0;
}



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


LOVEEVER 发表于 2024-3-27 12:50

数组可以理解为目视化的指针

xdvca 发表于 2024-7-31 22:36

在实际编程中,数组适合处理固定大小的数据集合,而指针适合处理动态数据和复杂的数据结构。
页: [1]
查看完整版本: 数组和指针有着密切的关系,但语法和用法上有重要区别