[英]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.