c语言中二维数组(*a)[1]和*a[1]有什么区别,为啥他们的值不一样?
发布网友
发布时间:2023-09-08 02:27
我来回答
共4个回答
热心网友
时间:2023-10-27 03:13
二维数组名是一个指向一个一维数组的指针,a是一个二维数组名,就是一个指向一维数组的指针,一个这样的指针求间接运输(*a),得带的是这个指针所指向的一维数组的数组名,在此是 a[0], 数组名加一个下标就是数组元素值,(*a)[1]就是 第0行数组的第1个元素 a[0][1]-->2
*a[1]->通过运算符优先级看,是先运算 a[1],也就是第1行的数组名,一位数组名是第0个元素的首地址,a[1]就是第1行元素a[1][0]的地址,*求间接运输,那么*a[1]就是 a[1][0]的值-->41
热心网友
时间:2023-10-27 03:13
数组 a是 int**类型 (*a)就相当于解了一次引用 由于a是数组的首地址
所以就得到第一条 int* 相当于a[0] 然后再在这一条int*中求下标1 相当于a[0][1] = 2;
*a[1] 如果不熟悉运算符优先级的就会搞混 可以转成*(a[1])理解 a[1] 是一个int*类型 表示是第二条 在对a[1]解引用 就得到第二条int*的首个元素41
热心网友
时间:2023-10-27 03:14
*和[]的运算符优先级不一样
(*a)[1]先 (*a),就是a[0],那么指代的就是a[0][1]=2
*a[1]先 a[1],再取值,那么指代的就是a[1][0] = 41
热心网友
时间:2023-10-27 03:14
a[1]返回的是a的第二行,*a[1]就是第二行的第一个元素41
*a的含义不太明确,你可以把数组中1234换成2345,看看打印结果是什么?