首页 > 试题广场 >

在 CC++ 中,若有定义 char a [10], *p

[单选题]
在 C/C++ 中,若有定义 char a [10], *p=a; ,那么下列赋值语句正确的是( )。
  • a [] ="abcdefg";
  • a="abedefg";
  • *p="abcdefg";
  • p="abcdefg ";
双引号做了3件事: 1.申请了空间(在常量区),存放了字符串 2. 在字符串尾加上了'/0' 3.返回地址 你这里就是 返回的地址 赋值给了 p
发表于 2018-09-16 18:56:43 回复(25)
将字符串赋值给字符数组: ********************************************** 1.定义时直接用字符串赋值。 char a[10]="hello";但是不能先定义再赋值,即以下非法:char a[10];a[10]="hello"; ********************************************** 2.利用strcpy。 char a[10]; strcpy(a,"hello"); ********************************************** 3.利用指针。 char *p; p="hello";这里字符串返回首字母地址赋值给指针p。另外以下非法:char a[10]; a="hello"; a已经指向在堆栈中分配的10个字符空间,不能再指向数据区中的"hello"常量。可以理解为a是一个地址常量,不可变,p是一个地址变量。 ********************************************** 4.数组中的字符逐个赋值。
编辑于 2018-09-22 10:38:09 回复(8)
d答案也没有对数组进行赋值,只是改变了指针p的指向
发表于 2018-10-29 16:53:00 回复(3)

A选项,应该是a[10]="abcdefg"
B选项,a是数组首地址不能这样赋值
C选项,*p=a,也是指针地址变量,不能这样赋值
D正确

发表于 2018-08-18 22:09:45 回复(6)
emmm
发表于 2022-01-27 15:42:10 回复(2)
A.字符串只能在声明的时候赋值 char a[10]=“adagd”
B.a是一个地址常量,指向一个固定的地址,不能再指向“abcd”这个地址(“”的作用是返回一个地址)
C.p是一个指针,指向一个地址,应该用p="agagae";
发表于 2021-02-15 18:10:06 回复(0)
将字符串赋值给字符数组: ********************************************** 1.定义时直接用字符串赋值。 char a[10]="hello";但是不能先定义再赋值,即以下非法:char a[10];a[10]="hello"; ********************************************** 2.利用strcpy。 char a[10]; strcpy(a,"hello"); ********************************************** 3.利用指针。 char *p; p="hello";这里字符串返回首字母地址赋值给指针p。另外以下非法:char a[10]; a="hello"; a已经指向在堆栈中分配的10个字符空间,不能再指向数据区中的"hello"常量。可以理解为a是一个地址常量,不可变,p是一个地址变量。 ********************************************** 4.数组中的字符逐个赋值。
发表于 2019-10-11 00:00:18 回复(1)
a是数组名,是一个指针常量,指向该数组首元素的地址,该指向不能改变;而p是指针变量,可以改变其指向。
发表于 2021-10-28 10:28:47 回复(0)
本题出的有问题,我自己觉得字面值字符串,"abcdefg"这种,是当const char *看的,D应该是有问题。

在gcc4.8底下试 char a[10], *p = a; p = "abcdefg"; 没报错,只会提示warning,[Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings], 另外,修改其中内容,程序会异常,即p[2] = '3';这种操作是不行的。

在vc底下试是编译不通过
E0513    不能将 "const char *" 类型的值分配到 "char *" 类型的实体

所以,字面值常量还是按const char *来看。
发表于 2020-02-10 22:55:51 回复(2)
馹头像
发表于 2022-02-22 18:15:59 回复(0)

请问这是依据什么语言给的答案 bcd的字符串都含有中文引号

发表于 2018-08-29 17:00:38 回复(1)
B:a=”abedefg\0";
发表于 2020-04-06 16:01:38 回复(0)
但是d也没有对数组赋值吧
发表于 2019-11-12 12:21:55 回复(2)
*p=a,p 不就是 a 的首地址吗,为什么可以直接给 p 赋值呢求各位大神解答一下
发表于 2023-06-30 20:50:48 回复(0)
将字符串赋值给字符数组: ********************************************** 1.定义时直接用字符串赋值。 char a[10]="hello";但是不能先定义再赋值,即以下非法:char a[10];a[10]="hello"; ********************************************** 2.利用strcpy。 char a[10]; strcpy(a,"hello"); ********************************************** 3.利用指针。 char *p; p="hello";这里字符串返回首字母地址赋值给指针p。另外以下非法:char a[10]; a="hello"; a已经指向在堆栈中分配的10个字符空间,不能再指向数据区中的"hello"常量。可以理解为a是一个地址常量,不可变,p是一个地址变量。 ********************************************** 4.数组中的字符逐个赋值。
发表于 2023-05-19 15:58:26 回复(0)
D选项有问题, 当 *p 指向 a 数组时, 这时候的 p 指向的是 a 的首地址, 并不会和字符数组初始化一样, 系统会帮你自动把字符串按字符分类放入对应的字符数组元素中. 这样赋值就相当于你要给一个未声明的字符数组的元素地址赋值一个字符串一样.
例如:  char a[10];
          a = "adfb";
这显然是行不通的, 和 p = "abcdefg "; 这个题目一个道理, 不明确的p 指针地址就像你要放一个字符串到一个字符地址里面一样, 十分的不安全
发表于 2022-09-04 10:12:42 回复(0)
下面都有理有据的分析,可我寻思这不是Java嘛
发表于 2019-11-30 17:47:34 回复(1)

见1的意思是看这个图片
编辑于 2024-01-16 15:33:32 回复(0)
“abcdefg" 这是具有一个新的空间地址,前段时候实际工作中就出现这样的错误 把一个buf=”abcdefg"这样的情况,就把buf的地址都改了,程序就奔溃了 ,发现了这个问题还被说了一顿 这样的基础知识都会错,D项是p是普通指针 重新指一个地址没有问题  今天又做错了 唉这是怎么了
发表于 2023-11-14 08:15:13 回复(0)
p="abcdefg "是将字符串"abcdefg "的首地址赋值给了指针p
发表于 2023-11-06 20:24:32 回复(0)