C 指针和数组的区别

Abstract

本人正在学习Stanford CS107,课程中让人不停的看汇编,写汇编,让我对数组和指针有个很深的认识。


区别

C 指针和数组的区别
int *a 是一个指针,他是一个变量,可以取地址。
int a[2]中的a是一个值,值为数组的地址。不能取地址。


汇编

在汇编里:这两个是这样的:
数组:
C 指针和数组的区别
指针:
C 指针和数组的区别


指针和数组 with 函数

C 指针和数组的区别
首先:a的类型是int[2],&a的类型是int (*)[2]。

可以看到fun1的形参类型为int*,当数组传入时,退化成了指针。具体可以查array to pointer decay。
fun2的形参类型为int (*)[2],所以数组转入时,类型为int (*)[2]