![](/img/trans.png)
[英]Why can't I access elements of a 2D array if I have declared it using pointer notation?
[英]why can't we access 2D array as of 1D array? How can i access?
为什么我们不能从一维数组中访问二维数组? 如何访问?
数组函数:
int **combination(int no)
{
int i,j,c=0;
static int arr[100][2];
for(i=0;i<=no;i++){
for(j=0;j<=no;j++){
if(((i+j)==no)){
arr[c][0]=i;
arr[c][1]=j;
c++;
}
}
}
return arr;
}
主功能:
int main() {
int n,k,i;
int **arr;
int size=10;//let us assume.
scanf("%d %d", &n, &k);
fprintf(stderr, "1\n");
arr=combination(n);
fprintf(stderr, "2\n");
for(i=0;i<size;i++){
printf("%d-%d",arr[i][0],arr[i][1]);
}
return 0;
}
它显示:
.c:29:8: warning: return from incompatible pointer type [-Wincompatible-pointer-types]
return arr
和分段错误核心转储。
您能否建议调用以访问该二维数组中的元素的指针类型是什么?
那是因为int arr[100][2]
(指向 int [2] 数组的指针)与int**
(指向int**
的指针的指针)不兼容。
为什么?
C11 标准 - 6.3.2.1 其他操作数 - 左值、数组和函数指示符 (p3)
数组指针转换
(p3) 除非它是
sizeof
运算符、_Alignof
运算符或一元'&'
运算符的操作数,或者是用于初始化数组的字符串文字,否则类型为“类型数组”的表达式将转换为类型为“指向类型的指针”的表达式,它指向数组对象的初始元素,而不是左值。
将 6.3.2.1(p3) 应用于int arr[100][2]
,结果是int (*arr)[2]
(指向 int [2] 数组的指针),而不是int**
。 所以你的编译器正确地生成了警告。
如果你真的想这样做,那么在main()
中将你的arr
声明更改为:
int (*arr)[2];
然后将您的函数声明更改为:
int (*(combination)(int no))[2]
(一个函数采用(int no)
返回int (*...)[2]
一个指向int
[2] 数组的指针)
您还应该将函数中c
的值限制为小于100
以防止超出数组边界。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.