c - 递增一个 D 数组指针

标签 c pointers

#include<stdio.h>
#include<conio.h>

void main()
{
 int a[3][2]={{4,7},{6,5},{9,1}};

 int i,j;
 clrscr();

 for(i=0;i<2;i++)
  for(j=0;j<3;j++)
   {
     printf("%d ",*(a[j]+i));
   }
 getch();
}

这里的a[i] 是 int (*)[2] 类型。所以当我们执行 *(a[0]+1) 时,它应该转到下一行并打印 6 对吗?为什么打印 7?

最佳答案

a[0] 是一个包含 2 个整数且值为 {4,7} 的数组。它的类型为 int[2]。当在大多数表达式中使用时,它会自动衰减为指向其第一个元素的指针,即类型 int* 指向 4。将其递增 1 使其指向下一个 int,即 7。

*(a[j]+i) 更清晰的写法是 a[j][i]。这做同样的事情,因为 p[x] 被定义为 *(p+x)

关于c - 递增一个 D 数组指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45771640/

相关文章:

c - 访问结构体数组内的数组

从 C 中的 AS3 ByteArray 将 big endian 转换为 little endian

c - 结构变量指针声明错误

c - 使用 char 时双重释放或损坏**

c++ - 如何在给定派生类型指针的情况下有条件地将指针转换为基类型

C++ 字节字符串转换为字节数据类型并计算字节数

c - 在 C 中分配无符号长整型内存时出错

C:用户输入验证函数

pointers - 如何比较 LLVM-IR 中的指针?

c++ - 编译cpp文件时出错