繁体   English   中英

指针中的二维数组

[英]2 dimensional array in 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是一个1d指针数组,然后在printf语句中如何使用2d数组。 同样,输出为1 2

这里p是一个1d指针数组

是的,您可以将下标运算符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
}

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

表达式a[i]的值为*(a + i) a是一个指针,和a + i给出的地址i “个阵列(指针运算的元件是基于被指向的类型;如果a指向一个int ,然后a + i给出的地址i 'th int跟随a int那个。

因此,鉴于您的指针数组:

int *p[2];

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM