微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

#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 ans[5][5];

数组的元素类型为int[5]。例如,表达式 ans[0] 给出了这样一个数组。表达式中使用的数组(极少数例外)被转换为指向它们的第一个元素的指针。因此,ans[0] 类型的表达式 int[5] 被隐式转换为 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 );

其结果相当于下面的代码片段

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

你接近数组错误 试试这个:

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]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。