【发布时间】:2019-08-18 09:54:59
【问题描述】:
练了一些简单的数组和指针基础,遇到了看不懂的东西:
在我能找到的所有书面资料中,他们说二维数组的名称实际上是一个二维指针, 意思是如果我写:
int a[3][4];
同时声明一个指针:
int **d2;
它们都属于同一类型,我可以放心地分配:
d2 = a;
使指针指向第一行的开头。
但最令人惊讶的是,这不起作用,我的问题是——为什么?
我会为您复制我收到的代码和警告:
#include <stdio.h>
int main() {
int **d2;
int a[5][2] = { {1, 2}, {3, 4}, {5, 7}, {7, 8}, {9, 11} };
d2 = a;
while (d2 < a + 2) {
printf("%d", **d2);
d2++;
}
return 0;
}
我得到了这个诊断结果:
warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
d=a;
^
ptr.c:11:9: warning: comparison of distinct pointer types lacks a cast
while(d<a+2)
【问题讨论】:
-
问题是a是二维数组,d2是指针的指针。 'a' 是连续的,它不存储变量地址。