在C语言中,数组名在某些情况下可以直接用作指针
int arr[10];
scanf("%d", &arr[0]); // 正确,使用 & 符号
scanf("%d", arr); // 也正确,arr 代表 &arr[0]
数组名可以被视为指向其第一个元素的指针,这里强调的是第一个元素
但是在单个具体的数组,比如arr[1],就必须加上&,这里不加&的例子也就只有arr整体(这个数组名可以视为指向第一个元素的指针,它可以局限性地进行地址的定位)
arr[1]
是数组 arr
中第二个元素的值,而不是地址,那么他就得加上&
scanf
需要的是一个指向 int
类型的指针(即地址),而不是一个 int
值
//也即,arr[1]等价于 *arr [1] (已经解引用,等价于变量名)
int arr[3][2];
scanf("%d", &arr[0][0]); // 正确,使用 & 符号
scanf("%d", arr[0]); // 也正确,arr[0] 代表 &arr[0][0]
对二位数组,能不加&的也就是arr[ ]这种,不加第二个[ ],单纯表示二位数组中的行
所以不加&就是特例,加&才是正常的!!!
Comments NOTHING