零的执行人 发表于 2020-3-29 20:16:15

小白求助

1.
以下不能正确进行字符串初始化的语句是:

A.
char str = "good!";

B.
char str[] = "good!";

C.
char str = {'g', 'o', 'o', 'd', '!'};

D.
char str[] = {'g', 'o', 'o', 'd', '!'};

2.

下面的代码段执行后,输出的结果是:
int i=0;
if ( i==0 ) {
    int i=3;
}
printf("%d\n", i);


请问:
第一题我编译都通过了呀,没有发现哪个选项初始化有问题。。。
第二题if ( i==0 ) {int i=3;}和if ( i==0 ) { i=3;}的输出结果为什么会不同呀?求解释一下。

qiuyouzhi 发表于 2020-3-29 20:24:45

本帖最后由 qiuyouzhi 于 2020-3-29 20:31 编辑

应该是D。因为D没有结束符'\0'。
你打印它,再打印另一个字符串
应该会有乱码的

BngThea 发表于 2020-3-29 20:25:30

1 现在的c挺智能了,都能正确初始化,但A中后几个字符是乱码
2 大括号里面声明的int生命周期只在大括号里面

Draem 发表于 2020-3-31 11:17:33

BngThea 发表于 2020-3-29 20:25
1 现在的c挺智能了,都能正确初始化,但A中后几个字符是乱码
2 大括号里面声明的int生命周期只在大括号里 ...

如果A后几个字符是乱码的话,是不是也可以推论C也同理{:5_96:}

Draem 发表于 2020-3-31 11:24:51

补充一下三楼老哥的第二点声明;
你的if语句中int i = 3;相当于重新定义了一个同样名字的i变量并且赋值为3,但是作用域仅仅是在if函数的大括号以内,出了if函数,i还是 i= 0 的那个初始的i;如果你if函数中没有定义新的变量i,而是直接用赋值语句 i= 3 的话,相当于引用了外部变量i, 并且改变了他的初始值为3
页: [1]
查看完整版本: 小白求助