为什么直接访问时不打印二维数组值

Why it is not printing 2d array value when access directly

#include<stdio.h>
int main(){
int i,j;
int ans[5][5];
ans[0][0] = 10;
printf(" why this %d \n\n",ans[0,0] );
}

并且输出是一些垃圾值 我在代码块中试过这个

你接近阵列错误 试试这个:

int main(){
    int i,j;
    int ans[5][5];
    ans[0][0] = 10;
    printf(" why this %d \n\n",ans[0][0] );
    return 0;
}

您需要使用“[number][number]”从二维数组中获取数字而不是 [number,number]

你声明了一个二维数组

int ans[5][5];

数组的元素类型为int[5]。因此,例如表达式 ans[0] 给出了这样一个数组。表达式中使用的数组(极少数例外)被转换为指向其第一个元素的指针。因此具有类型 int[5] 的表达式 ans[0] 被隐式转换为类型 int * 指向元素 ans[0][0]

的指针

在这个表达式中

ans[0,0]

在方括号中使用了带有逗号运算符0,0的表达式。由于带有逗号运算符的表达式的第一个操作数没有副作用,因此上面的表达式等效于 ans[0].

也就是说在这个调用中

printf(" why this %d \n\n",ans[0,0] );

相当于

printf(" why this %d \n\n",ans[0] );

您正在尝试使用转换说明符 %d 输出一个指针,该说明符旨在输出导致未定义行为的 int 类型的对象。

你的意思好像是

printf(" why this %d \n\n",ans[0][0] );

printf(" why this %d \n\n", **ans );

printf(" why this %d \n\n", *ans[0] );

printf(" why this %d \n\n",  ( *ans )[0] );

至于逗号运算符则只需考虑以下代码片段

int i = 0;
ans[0][0] = ( ++i, ++i, ++i, ++i, ++i, ++i, ++i, ++i, ++i, ++i );

其结果相当于以下代码片段

int i = 10;
ans[0][0] = i;