前置知识: C

指针与数组的区别

1 minAdvanced2026/6/14

C语言指针与数组的区别:sizeof、&运算、传参差异。

1. sizeof 差异

int arr[10];
int *ptr = arr;

sizeof(arr);  // 40 = 10 * sizeof(int)
sizeof(ptr);  // 8(64位系统)或 4(32位系统)

数组:sizeof 返回整个数组大小 指针sizeof 返回指针本身大小

2. & 运算差异

int arr[10];

&arr;    // 类型: int (*)[10],指向整个数组的指针
&arr + 1 // 偏移 sizeof(int[10]) = 40 字节

arr;     // 类型: int*,指向首元素
arr + 1  // 偏移 sizeof(int) = 4 字节

3. 赋值差异

int arr[10];
int *ptr = arr; //  数组名可隐式转为指针

arr = ptr;      //  数组名不可赋值(不是左值)
arr++;          //  数组名不可自增
ptr++;          //  指针可自增

4. 函数参数

// 数组作为参数时退化为指针
void func(int arr[]) {
    sizeof(arr); // 8(指针大小,不是数组大小)
}

// 等价于
void func(int *arr) {
    sizeof(arr); // 8
}

5. 多维数组

int matrix[3][4];

// matrix 的类型: int (*)[4]
// matrix[i] 的类型: int*
// matrix[i][j] 的类型: int

sizeof(matrix);     // 48 = 3*4*sizeof(int)
sizeof(matrix[0]);  // 16 = 4*sizeof(int)