关于字符串常量赋值给字符变量的疑惑?
临近计算机二级考试,考前抱佛脚,从图书馆借了本《计算机等级考试二级 C 语言考点精解及全真模型(上)》康康题型。有一例题以下定义语句中正确的是____,选项 B 是这样的char A = 65+1, b = "b";答案竟然就是选项 B?,我往 Microsoft Visual C++ 2010 学习版 中输入试试看:/* 环境:Microsoft Visual C++ 2010 学习版
* 文件名:assign.c
* 作用:理解赋值表达式
* 日期:2021 年 9 月 16 日
*/
#include <stdio.h>
#include <Windows.h>
int main( )
{
char A = 65+1, b = "b";
printf("A: %c\nb: %c%\n", A, b);
system("pause");
return 0;
}
直接提示类型错误:
我直接按下 fn+F5 编译运行:
{:10_277:}
这是为什么呢?难道将字符串
"b"
的地址赋值给了字符变量
b
{:9_241:}
往其中加入一行输出语句试试看:
/* 环境:Microsoft Visual C++ 2010 学习版
* 文件名:assign.c
* 作用:理解赋值表达式
* 日期:2021 年 9 月 16 日
*/
#include <stdio.h>
#include <Windows.h>
int main( )
{
char A = 65+1, b = "b";
printf("%p\n", b);
printf("A: %c\nb: %c%\n", A, b);
system("pause");
return 0;
}
再来一次
{:10_256:} 十六进制 00000058 转换成十进制整数表示就是 88 正好是大写字母 X 对应的 ASCII 码值。
不知道我的想法对不对呢?
本帖最后由 人造人 于 2021-9-16 18:23 编辑
B 怎么能是对的呢
B 是对的,也就是说,A、C、D 都直接无法通过编译?
char b = "b";
这个会把字符串 "b" 的首地址赋值给变量 b
这个地址有可能是 32 位 4 个字节,也有可能是 64 位 8 个字节
不管多少位,只要最低字节
你想的基本是对的,只是用来测试的代码是不对的
应该是下面这样,运行下面这个代码,你再看看输出结果
/* 环境:Microsoft Visual C++ 2010 学习版
* 文件名:assign.c
* 作用:理解赋值表达式
* 日期:2021 年 9 月 16 日
*/
#include <stdio.h>
#include <Windows.h>
int main( )
{
char A = 65+1, b = "b";
printf("%p\n", "b");
printf("A: %c\nb: %c\n", A, b);
return 0;
}
选项 B 是错的,如果 A、C、D 都无法通过编译,那就选 B 吧,毕竟是考试
本帖最后由 jhq999 于 2021-9-16 16:46 编辑
char *b = "b";
或者 char b='b';
除非char b=(char)"b";
才能通过编译
估计你那个b值是变量未初始化的随机值
C语言里双引号内容表示字符串 并不能表示单个字符 你最后猜的不对
地址值和ASCII码值没有关系
你多次运行,地址值可能不一样 人造人 发表于 2021-9-16 18:21
B 怎么能是对的呢
B 是对的,也就是说,A、C、D 都直接无法通过编译?
char b = "b";
选项 A:
int a=b=0;
选项 C:
float a=1, *b=&a, *c=&b;
选项 D:
double a=0.0; b=1.1; Cardist 发表于 2021-9-16 18:43
选项 A:
选项 C:
选项 A 和 D 是错的,语法错误
看选项 C
$ gcc -g -Wall -o main main.c
main.c: In function ‘main’:
main.c:4:26: warning: initialization of ‘float *’ from incompatible pointer type ‘float **’ [-Wincompatible-pointer-types]
4 | float a=1, *b=&a, *c=&b;
| ^
main.c:4:24: warning: unused variable ‘c’ [-Wunused-variable]
4 | float a=1, *b=&a, *c=&b;
| ^
$
选项 C 这算错吗?
选项 C 是 二级指针转一级指针
选项 B 是 一级指针转整数,而且截短到一个字节
B 和 C 哪一个是对的?我想请出题的那个人来解答这个问题
其实不必纠结,考试而已,选 "正确" 的那个就可以了
人造人 发表于 2021-9-16 18:54
选项 A 和 D 是错的,语法错误
看选项 C
估计甩锅给编辑的错
“B选项本来原稿是两个单引号'',纸质版错成了双引号""”{:10_256:} Cardist 发表于 2021-9-16 19:16
估计甩锅给编辑的错
“B选项本来原稿是两个单引号'',纸质版错成了双引号""”
^_^
页:
[1]