LXMARCO 发表于 2019-12-29 08:05:40

二维数组一个简单的小问题

#include<stdio.h>

int main()
{

      int a = {a=2,a=3,a=1};

      int i,j;

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


      return 0;
}
在这个程序中如果按上面程序写的输出是:
1310      
0200
0030


把int a 改为int a = {=2,=3,=1};的话:
输出是:
1000
0200
0030

(这个是小甲鱼上课课件中的,但是我自己尝试了第一种情况,请问为什么会这样呢?第一种情况为什么 a    a都会有输出呢?)

superbe 发表于 2019-12-29 10:49:50

本帖最后由 superbe 于 2019-12-29 14:05 编辑

第一种写法相当于:
对表达式a=2求值,把结果2赋给数组第一个元素a
对表达式a=3求值,把结果3赋给数组第二个元素a
对表达式a=1求值,把结果1赋给数组第三个元素a
在对表达式a=1求值时给a]赋值1,覆盖了前面给它赋的2,所以a的值最终是1。
指定初始化器应该是第二种写法。

LXMARCO 发表于 2019-12-29 20:10:10

superbe 发表于 2019-12-29 10:49
第一种写法相当于:
对表达式a=2求值,把结果2赋给数组第一个元素a
对表达式a=3求值, ...

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

这几句话怎么理解呢??    小白不是很理解请见谅   我在网上搜这句话也没看到相关的,请问这是个什么知识点呢?   对a[][] = ? 求值这是什么意思呢? 把结果赋值给数组 第? 个元素。请问为什么会这么赋值或者说怎么看出来的呢?   谢谢!

superbe 发表于 2019-12-29 22:15:59

举个例子:
int a = {1+2, 3+3, 2+4};
这个写法是不是把1+2算出来的3给了a,把3+3算出来的6给了a,以此类推。
现在把1+2这个算术表达式换成了一个赋值表达式a=2,还是类似的将a=2求值为2,把2给了a,以此类推。

注:赋值表达式不单是给左边的变量赋值,它还有一个表达式的值,就是=号右边那个值。

LXMARCO 发表于 2019-12-29 23:17:30

superbe 发表于 2019-12-29 22:15
举个例子:
int a = {1+2, 3+3, 2+4};
这个写法是不是把1+2算出来的3给了a,把3+3算出来的6 ...

醍醐灌顶!非常感谢!
页: [1]
查看完整版本: 二维数组一个简单的小问题