输出二维数组元素的值
本帖最后由 张世来4610484 于 2020-3-1 18:04 编辑书上原话“指向整形变量的指针变量ptr只能指向a,*(a+i),&a等指向列的地址,而不能指向a+i,&a等指向行的地址”
代码如下:输出二维数组元素的值
#include <stdio.h>
void main ()
{
static int a={{2,4,6,8},{10,12,14,16},{18,20,22,24}};
int (*ptr);
int i,j;
ptr=a;
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
printf("%4d",*(*(ptr+i)+j));
printf("\n");
}
}
请问ptr=a;这个是不是指向行的地址,而且上面我列举的五个不都是代表一个值吗,
为什么我换成ptr=a;或ptr=a;ptr=*a;这种就不行呢,求解,麻烦详细点,谢谢 int (*ptr); 数组指针,指向一个有4个int元素的一维数组。
ptr=a; 也就是把二维数组a的地址赋给ptr。也就是a或&a。要清楚的是这里的 a不是一个数组元素值,而是a二维数组中第一行 一维数组 a-a的地址。 所以 *ptr = &a或 *ptr=&a。
*(ptr+i) 是第 i 行的地址。*(ptr+i)+j 就是第 i 行 第 j 列的地址。*(*(ptr+i)+j)就是 a的元素值了。
只要把 二维数组 a 中的 a 看成一个变量,比如说 b, b 是一个4个 int 元素的一维数组。就容易理解了。 chxchxkkk 发表于 2020-2-29 23:46
int (*ptr); 数组指针,指向一个有4个int元素的一维数组。
ptr=a; 也就是把二维数组a的地址赋给ptr。也 ...
你没有理解我的意思,我问的是二维数组中,a,a,&a,*a,&a这五个值不是一样的吗,比如说首地址a为2000,那么这五个是不是都等于2000,第一个问题是这五个中区分行地址和列地址是依据什么来分的?第二个问题是
ptr=a;
既然这五个值相等,那么我换成ptr=a;会报错,但换成ptr=&a;又可以是怎么回事? 张世来4610484 发表于 2020-3-1 18:14
你没有理解我的意思,我问的是二维数组中,a,a,&a,*a,&a这五个值不是一样的吗,比如说首地址 ...
他们类型不同,相同的地址,但是含义不同
Ptr需要指向整个数组,而不是单个元素。
页:
[1]