鱼C论坛

 找回密码
 立即注册
查看: 1346|回复: 4

[已解决]二维数组一个简单的小问题

[复制链接]
发表于 2019-12-29 08:05:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>

int main()
{

        int a[3][4] = {a[1][1]=2,a[2][2]=3,a[0][0]=1};

        int i,j;

        for (i = 0; i < 3;i++)
        {
                for (j = 0; j < 4; j++)
                {
                        printf("%-d  ", a[i][j]);
                }
                printf("\n");
        }


        return 0;
}
在这个程序中如果按上面程序写的输出是:
1  3  1  0      
0  2  0  0  
0  0  3  0  


把int a[3][4] 改为int a[3][4] = {[1][1]=2,[2][2]=3,[0][0]=1};的话:
输出是:
1  0  0  0  
0  2  0  0  
0  0  3  0  

(这个是小甲鱼上课课件中的,但是我自己尝试了第一种情况,请问为什么会这样呢?第一种情况为什么 a[0][1]    a[0][2]都会有输出呢?)
最佳答案
2019-12-29 10:49:50
本帖最后由 superbe 于 2019-12-29 14:05 编辑

第一种写法相当于:
对表达式a[1][1]=2求值,把结果2赋给数组第一个元素a[0][0]
对表达式a[2][2]=3求值,把结果3赋给数组第二个元素a[0][1]
对表达式a[0][0]=1求值,把结果1赋给数组第三个元素a[0][2]
在对表达式a[0][0]=1求值时给a[0[0]]赋值1,覆盖了前面给它赋的2,所以a[0][0]的值最终是1。
指定初始化器应该是第二种写法。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-29 10:49:50 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
本帖最后由 superbe 于 2019-12-29 14:05 编辑

第一种写法相当于:
对表达式a[1][1]=2求值,把结果2赋给数组第一个元素a[0][0]
对表达式a[2][2]=3求值,把结果3赋给数组第二个元素a[0][1]
对表达式a[0][0]=1求值,把结果1赋给数组第三个元素a[0][2]
在对表达式a[0][0]=1求值时给a[0[0]]赋值1,覆盖了前面给它赋的2,所以a[0][0]的值最终是1。
指定初始化器应该是第二种写法。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-29 20:10:10 | 显示全部楼层
superbe 发表于 2019-12-29 10:49
第一种写法相当于:
对表达式a[1][1]=2求值,把结果2赋给数组第一个元素a[0][0]
对表达式a[2][2]=3求值, ...

请问一下:
对表达式a[1][1]=2求值,把结果2赋给数组第一个元素a[0][0]
对表达式a[2][2]=3求值,把结果3赋给数组第二个元素a[0][1]
对表达式a[0][0]=1求值,把结果1赋给数组第三个元素a[0][2]
在对表达式a[0][0]=1求值时给a[0[0]]赋值1,覆盖了前面给它赋的2,所以a[0][0]的值最终是1

这几句话怎么理解呢??    小白不是很理解请见谅     我在网上搜这句话也没看到相关的,请问这是个什么知识点呢?   对a[][] = ? 求值  这是什么意思呢? 把结果赋值给数组 第? 个元素。  请问为什么会这么赋值或者说怎么看出来的呢?   谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-29 22:15:59 | 显示全部楼层
举个例子:
int a[3][4] = {1+2, 3+3, 2+4};
这个写法是不是把1+2算出来的3给了a[0][0],把3+3算出来的6给了a[0][1],以此类推。
现在把1+2这个算术表达式换成了一个赋值表达式a[1][1]=2,还是类似的将a[1][1]=2求值为2,把2给了a[0][0],以此类推。

注:赋值表达式不单是给左边的变量赋值,它还有一个表达式的值,就是=号右边那个值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-29 23:17:30 | 显示全部楼层
superbe 发表于 2019-12-29 22:15
举个例子:
int a[3][4] = {1+2, 3+3, 2+4};
这个写法是不是把1+2算出来的3给了a[0][0],把3+3算出来的6 ...

醍醐灌顶!  非常感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 05:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表