常量指针与指针常量习题(一)
已知const char * node="ABC";下列语句合法的是___.
A node[2] = 'k';
B *node[2]='k';
C *node = "xyz";
D node="xyz";
D
这道题目考察了C语言中const char*指针的特性和使用规则。D选项是正确的,因为node是一个指向字符串常量的指针,可以修改指针指向的地址,让它指向新的字符串常量"xyz"。
分析其他选项的错误原因:
A错误:node[2]表示访问字符串的第3个字符'C',由于原字符串是常量,不能直接修改其中的字符。
B错误:node[2]是字符'C',而*node[2]试图将字符当作地址进行解引用操作,这是错误的语法。
C错误:*node表示对指针解引用,获取第一个字符'A',不能将一个字符串赋值给单个字符。
需要注意的是:
- const char *node 表示node是一个指向常量字符的指针
- 字符串常量本身是不可修改的
- 但是可以修改指针node使其指向其他的字符串常量
- 这就是为什么D选项node="xyz"是合法的操作
记忆技巧:
const与static的修饰技巧
如果const跟着的是类型修饰符,则修饰该符,否则修饰它前面的符。
例如:
const int a; const后面是int则表明a的值不能变。
const int* a;
const后面是int则表明a的值不能变。
int const * a; const后面是*,则表面指针的指向不能变。
题目中
const char * node="ABC";表明char不能变,即“ABC”不能改变,但是指针的指向可以变。