首页 > 试题广场 >

给出以下定义,下列哪些操作是合法的?

[单选题]
给出以下定义,下列哪些操作是合法的?
const char *p1 ="hello";
char *const p2 = "world";
  • p1++;
  • p1[2] = ‘w’;
  • p2[2] = ‘l’;
  • p2++;
推荐
只能选A。
p1是指向字符常量的指针,p1本身不是常量,所以p1++合法,A正确。
p2本身是指针常量,可以指向非常量的字符。但是"hello"这样声明的字符串是存储在只读存储区的,不可修改,所以B,C,D都错误。
编辑于 2015-03-24 08:46:23 回复(5)
口诀:左定值,右定向。
const在*的左边不能改变字符串常量的值,故B错;
const在*的右边不能改变指针的指向,故D错;
由于 “world“存储在字符常量区,不能直接修改其值,故C错;
若要修改其值,应该改为char str []= "world";

发表于 2015-09-04 11:33:20 回复(6)
p2[2]='i'
 明显是不能进行更改的 ,虽然 p2为 指针常量,按照一般的定义是可以修改对应的内容,但是 在c/c++中    * const p2="world" 此时的 world 是一个字符串常量,常量的值可以更改么?
如果这样   char  str[]="world";
    *const p2=str;
此时  p2[2]='i' 是、正确的   
赶紧改过来!!!!
发表于 2015-03-23 22:15:08 回复(4)
字符串常量地址是固定的,P2指向的内容变了,他的地址必然也会变,所以C是错的。
发表于 2015-07-06 11:42:33 回复(0)
const char *p1 = “hello”; 是常量指针,p1指向一个常量a,指针p1可变,但常量不能变;
char *const p2 = “world”;是指针常量,指针p2不可变,但所指向的变量a内容可变;但由于a “world”也是一个字符串常量,内容也就不能变了。
发表于 2020-09-04 11:00:19 回复(0)
c选项 数组的下标 最终还是通过p2+=2;实现的,所以非法,故不选
发表于 2016-03-18 19:45:29 回复(0)
选a
a是合法的
b对const内容进行写入,非法
c对常量区内存进行写入,非法
d对常量指针进行修改,非法
发表于 2015-03-27 13:45:46 回复(0)
口诀:左定值,右定向。 即 const在*的左边不能改变字符串常量的值,故B错; const在*的右边不能改变指针的指向,故D错; 由于 “world“存储在字符常量区,不能直接修改其值,故C错; 若要修改其值,应该改为char str []= "world";
发表于 2019-07-01 15:42:28 回复(0)
a
发表于 2014-10-23 13:38:52 回复(0)
不愧是你,阿里巴巴
发表于 2020-11-26 10:07:40 回复(0)
A
指针常量

C不可以修改静态数据区
发表于 2015-03-26 16:11:58 回复(0)
AC
constant char *p1 = "hello"; p1是指向constant常量的指针;指向constant常量的指针,不是指给它传址的变量必须是constant常量,而是指任何变量传址给它,它都不能间接修改该变量的值,故B选项错误,A正确。
char *constant p2 = "world"; p2为constant常量指针,常量指针必须初始化,且其值不能改变,故D错误,但可以修改它所指向的数据,故C正确,

编辑于 2015-03-24 08:46:23 回复(3)
口诀:左定值,右定向。 即 const在*的左边不能改变字符串常量的值,故B错; const在*的右边不能改变指针的指向,故D错; 由于 “world“存储在字符常量区,不能直接修改其值,故C错; 若要修改其值,应该改为char str []= "world";
发表于 2022-08-26 15:21:27 回复(0)
const char *p1;//表示常量指针,值不可变,指针指向可以变,故可以p1++,但不可p1[2]='w'
char *const p2;//表示指针常量,值可变,但指针常量不可变,故不可p2++
//右边直接等于字符串,是一个字符串常量,标明该位置的值不可变,因而,虽然和指针常量结合在一起,但值还是不可变,故不可p2[2]='1';


 

发表于 2022-01-12 13:04:51 回复(0)
口诀:左定值,右定向。 即 const在*的左边不能改变字符串常量的值,故B错; const在*的右边不能改变指针的指向,故D错; 由于 “world“存储在字符常量区,不能直接修改其值,故C错; 若要修改其值,应该改为char str []= "world";
编辑于 2023-01-30 16:30:24 回复(0)
口诀:左定值,右定向。
const在*的左边不能改变字符串常量的值,故B错;
const在*的右边不能改变指针的指向,故D错;
由于 “world“存储在字符常量区,不能直接修改其值,故C错;
若要修改其值,应该改为char str []= "world";
发表于 2022-08-08 22:27:05 回复(0)

图片说明

发表于 2022-07-03 17:52:13 回复(0)
A C
发表于 2014-10-23 13:56:20 回复(0)
char *const p2 = "world";这个在vs2022中本来就过不了编译,右边是字符串常量,是const char*类型,不能用来初始化char *const p2类型
发表于 2024-09-06 16:56:18 回复(0)
唯一会的
发表于 2024-05-30 03:45:05 回复(0)
啥玩意,C++11里面根本就编不过
helloworld.cpp:37:22: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
                      ^~~~~~~
helloworld.cpp: In function 'int main()':
     char *const p2 = "world";
                       ^~~~~~~
发表于 2023-03-21 14:56:07 回复(0)