char * s ; s="abcd"; 需要定义const才能把字符串常量,赋值给指针为什么可以
时间: 2024-04-24 13:22:05 浏览: 17
在 C 语言中,字符串常量是以字符数组的形式存储在内存中的,且字符串常量的值是不可修改的。当我们定义一个指针变量时,可以将指针指向字符串常量的首地址,这样就可以通过指针来访问字符串常量的值,但指针指向的地址是不可修改的。
在上面的代码中,`char *s;`定义了一个字符指针变量,但没有初始化。而`s="abcd";`则是将指针`s`指向了字符串常量"abcd"的首地址,这样就可以通过`s`指针来访问字符串常量的值。
需要注意的是,虽然字符串常量的值是不可修改的,但是指针变量本身是可以修改的。也就是说,我们可以修改指针变量`s`指向的地址,但不能通过`s`指针来修改字符串常量的值,这样会导致程序运行出错。
相关问题
char * s ; s="abcd"; 需要定义const才能把字符串常量,赋值给指针, 这样为什么可以
在 C 语言中,字符串常量是以字符数组的形式存储在内存中的,且字符串常量的值是不可修改的。当我们定义一个指针变量时,可以将指针指向字符串常量的首地址,这样就可以通过指针来访问字符串常量的值,但指针指向的地址是不可修改的。
在上面的代码中,`char *s;`定义了一个字符指针变量,但没有初始化。而`s="abcd";`则是将指针`s`指向了字符串常量"abcd"的首地址,这样就可以通过`s`指针来访问字符串常量的值。
需要注意的是,虽然字符串常量的值是不可修改的,但是指针变量本身是可以修改的。也就是说,我们可以修改指针变量`s`指向的地址,但不能通过`s`指针来修改字符串常量的值,这样会导致程序运行出错。
要禁止修改指针p本身,又要禁止修改p所指向的数据,这样的指针应定义为( ) A. const char *p="ABCD"; B. char const *p="ABCD"; C. char *const p="ABCD"; D. const char * const p="ABCD";
正确答案是 D. const char * const p="ABCD"。
这里需要同时使用两个 const 关键字:
- 第一个 const 用于修饰指向的数据类型 char,表示所指向的数据是不允许被修改的。
- 第二个 const 用于修饰指针变量 p,表示指针本身也是不允许被修改的。
选项 A 和 B 中的 const 修饰的是 char,表示所指向的数据是不允许被修改的,但是指针本身是允许被修改的,不符合题意。
选项 C 中的 const 修饰的是指针变量 p,表示指针本身是不允许被修改的,但是所指向的数据是允许被修改的,也不符合题意。