首页 > 试题广场 >

下面选项中的程序段,没有编译错误的是()

[单选题]

下面选项中的程序段,没有编译错误的是()

  • char* sp, s[10]; sp = "Hello";
  • char* sp, s[10]; s = "Hello";
  • char str1[10] = "computer", str2[10]; str2 = str1;
  • char mark[]; mark = "PROGRAM";
B.D:不能用赋值语句将一个字符串常量直接给一个字符数组赋值。
C.不能用赋值语句将一个字符数组直接给一个字符数组赋值,即字符串的复制(c语言中,但是在c++的string 类,上面的赋值是正确的)必须用strcpy()函数实现。

发表于 2019-07-17 21:43:52 回复(0)
更多回答
高赞答案是错的,数组就是数组,不是指针。数组名代表被分配的内存的首地址,是一个地址常量,是右值;而指针作为变量,却是一个左值。数组名不是常量指针,因为他们的类型不一样。
发表于 2017-10-25 23:38:53 回复(2)
【解析】
A char* sp, s[10]; sp = "Hello";   正确,sp为一个字符型指针,通过赋值获得了“hello”的地址;
B char* sp, s[10]; s = "Hello";      错误,字符数组赋值,用采用strcpy()函数,strcpy(s,"Hello");
C char str1[10] = "computer", str2[10]; str2 = str1;  错误,字符数组赋值,用采用strcpy()函数,strcpy(str2,str1);
D char mark[]; mark = "PROGRAM";  错误,字符数组未初始化不可省略数组大小,正确应为char mark[]= "PROGRAM";
答案选A
【验证】
A选项

B选项

D选项

编辑于 2019-10-17 15:22:21 回复(0)
数组名为常量指针, 不能作为左值, 故BCD都不对
发表于 2017-08-01 22:04:17 回复(2)
解析 :【解析】本题考查字符数组的初始化以及指向字符串的指针, B 选项不能直接将字符串赋值给数组名, C 选项不能将两个字符数组直接互相赋值, D 选项中不能这样定义 char mark[] ,必须指定长度或者直接初始化。
发表于 2017-04-30 11:58:44 回复(0)
数组名是个地址常量  常量不能被修改。。。。。。
发表于 2017-10-30 18:51:25 回复(0)
char s[10]="hello"  必须是这种格式。
char mark[];必须指定长度或者直接初始化
发表于 2017-07-19 20:20:09 回复(0)
字符数组用字符串赋值的三种可行形式:1、定义的时候直接用字符串赋值 char a[10]="hello";【注意】不能先定义再给它赋值,如char a[10]; a[10]="hello";这样是错误的,一个字符怎么能容纳一个字符串?况且a[10]也是不存在的!再如char a[10]; a="hello";//这种情况容易出现,a虽然是指针,但是它已经指向在堆栈中分配的10个字符空间,现在这个情况a又指向数据区中的hello常量,这里的指针a出现混乱,不允许!2、对数组中字符逐个赋值 char a[10]={'h','e','l','l','o'};3、利用strcpy char a[10]; strcpy(a, "hello");
发表于 2021-03-22 13:42:54 回复(0)
A也是不对的,不能用const给非常量指针赋值
发表于 2020-05-25 11:37:07 回复(1)
数组名代表的是被分配内存的首地址,它不能作为左值重新赋值,所以BCD都是错的。但是这个题A好像也有问题,如下:编译器提示不能将const char*转化为char*,如果变成const char* sp;sp="hello"则没有问题。
发表于 2019-08-14 16:48:09 回复(0)
数组名代表数组首地址,是一个常量,但是数组名类型不是指针,例如int s[10],s的类型应该是int [10],不是指针类型!
发表于 2018-04-26 11:39:00 回复(0)
A选项也不对吧,这不是野指针么
发表于 2017-08-22 14:36:37 回复(2)
都2022年了,怎么还有这种C++ 98的题
编辑于 2022-03-01 16:59:33 回复(0)

数组名是右值,不能够被赋值!


发表于 2019-10-14 20:58:59 回复(0)
B,C不能对数组名进行赋值,因为数组名是一个指针,不能更改所指向的值
发表于 2017-05-16 10:46:35 回复(1)
为什么我用c++编译A,还是会报错啊
发表于 2019-07-24 15:46:21 回复(1)
数组不可以直接赋值
发表于 2023-08-28 23:25:08 回复(0)
数组名是指针常量,常量,不能赋值,只能修改指向内容的值
发表于 2023-04-26 16:51:22 回复(0)
nmmd,A还得看编译器,有的算错有的不算
发表于 2023-03-24 16:29:49 回复(0)
A 选项
char* sp, s[10];sp = "Hello";
vs 提示:“无法从“const char [6]”转换为“char *”  
发表于 2022-11-18 10:24:15 回复(0)