指针中的二维数组

时间:2014-10-08 13:37:42

标签: c++ c pointers

#include<stdio.h>
void main()
{
    int a[] = { 1, 2, 3, 4 };
    int b[] = { 5, 6, 7 };
    int *p[2];
    p[0] = a;
    p[1] = &b + 1;
    printf("%d\n%d", &p[1][0], p[0][1]);
}

这里p是一个指针数组,那么为什么在printf语句中使用了一个二维数组。输出也是1 2

2 个答案:

答案 0 :(得分:2)

  

这里p是一个指针的数组

是的,您可以使用下标运算符ptr[index],其指针等同于*(ptr + index)

因此p[1][0]*(p[1] + 0)相同,与*(p[1])

相同

此外,由于包括void main()

在内的多种原因,您的代码无法编译

举例说明:

int main()
{
  const char *hello = "hello";
  const char *world = "world";

  const char *array[2] = {hello, world};

  char e = hello[1]; // char e now contains 'e'
  e = array[0][1]; // same thing as previous line

  char r = world[2]; // char r now contains 'r'
  r = array[1][2]; // same thing as previous line
}

答案 1 :(得分:0)

下标运算符[]是为指针表达式和数组表达式(在应用下标之前隐式转换为指针表达式)定义的。

表达式a[i]被评估为*(a + i); a是一个指针,a + i给出数组的i'元素的地址(指针算法基于指向类型;如果a指向int,则a + i会在i指向的int之后提供a'int *p[2]; 的地址。

所以给出你的指针数组:

p[0]

表达式*(p[0] + 1)具有指针类型,因此您可以添加偏移量并取消引用结果:p[0][1],这与写入{{1}}相同。