字符串指针 与 字符数组
2012-06-27 13:16
211 查看
遇到群里一人问一面试题
自己也调试了运行了一下确实报错。
这个是网上看到总结的还不错的。
(1) char *s="hello"; //"hello"是字符串常量,s是指向常量的指针,常量是不允许改变的,不能写成s[0]=X,但可以改变指针的值,使其指向不同的常量,如 s = "Xeron";
(2) char s[]="hello"; //指针常量,s本身的值不能修改,但可以修改其指向的内容,s[0]=X
两者的区别是
(1)定义的字符串在程序里不能被修改,因为它存放在代码段内;
(2)定义的字符串可被修改,它存放在数据段或者栈内。
这两种定义字符串的方法在函数内部和外部稍有区别
*函数外部:
(1) char *s="hello"; /*定义了指针s(数据段)和常量字符串"hello"(数据段),s的值为字符串首地址*/
(2) char s[]="hello"; /*定义了字符数组s,数组内容为"hello"(代码段),注意这里s只是一个符号而不是变量实体*/
*函数内部:
如果在函数内部使用(1),(2)定义,则"hello"字符串本身存放在代码段,当函数被调用时,
(1) 仅把字符串"hello"的首地址地址赋给s
(2) 把字符串"hello"拷贝一份放到栈内,把拷贝串的首地址赋给s
int main() { char *p="world"; p[0]='2'; printf("%s",p); }为什么错了
自己也调试了运行了一下确实报错。
这个是网上看到总结的还不错的。
(1) char *s="hello"; //"hello"是字符串常量,s是指向常量的指针,常量是不允许改变的,不能写成s[0]=X,但可以改变指针的值,使其指向不同的常量,如 s = "Xeron";
(2) char s[]="hello"; //指针常量,s本身的值不能修改,但可以修改其指向的内容,s[0]=X
两者的区别是
(1)定义的字符串在程序里不能被修改,因为它存放在代码段内;
(2)定义的字符串可被修改,它存放在数据段或者栈内。
这两种定义字符串的方法在函数内部和外部稍有区别
*函数外部:
(1) char *s="hello"; /*定义了指针s(数据段)和常量字符串"hello"(数据段),s的值为字符串首地址*/
(2) char s[]="hello"; /*定义了字符数组s,数组内容为"hello"(代码段),注意这里s只是一个符号而不是变量实体*/
*函数内部:
如果在函数内部使用(1),(2)定义,则"hello"字符串本身存放在代码段,当函数被调用时,
(1) 仅把字符串"hello"的首地址地址赋给s
(2) 把字符串"hello"拷贝一份放到栈内,把拷贝串的首地址赋给s
相关文章推荐
- 字符数组、字符指针和字符串
- C语言:将输入的字符串(char* cp)存入字符指针数组(char * spa[])
- 字符串指针与字符数组的区别
- 6-字符指针_删除字符串中的空格_register_指针数组
- C语言-数组与指针 字符与字符串
- 使用字符串指针变量和字符数组的区别
- 第十六周 项目二:用指针玩字符串(2.2.1:去除字符串str的特定字符(用数组名作形参))
- 字符串指针与字符数组的区别
- 第十六周 项目二--用指针玩字符串(2.2.1去除字符串中特定字符---数组名作形参)
- C++11 基础之字符数组,字符串,字符指针通过sizeof、strlen求值
- 指向字符串的指针 和 字符数组的区别
- c语言指针字符串与字符数组字符串的区别
- 数组/指针,字符数组/字符串/指向字符的指针
- C 语言中字符数组和字符串指针分析
- 字符数组和字符串指针的区别
- 输入一个字符串,存储在字符数组里,用指针的方式逐一显示字符,并求其长度
- 关于C语言字符数组、字符串和指针的相关问题
- 字符串指针与字符数组的区别
- c语言中 字符数组与字符串字面值 字符数组与字符指针数组
- C语言中字符数组和字符串指针分析