字符指针与字符数组

作者: 去留无意hmy | 来源:发表于2017-07-21 16:22 被阅读53次

字符指针

定义及初始化:
char *strs="Hello,world!"

char *strs;
str = "Hello,world!";

字符串中的所有字符在内存中是连续排列的,strs指向的是字符串的第0个字符(从零开始);我们通常将第0个字符的地址称为字符串的首地址。字符串中每个字符的类型都是char,所以 str 的类型也必须是char *。

访问方法:

printf("%s\n",strs);                    //访问整个字符串
printf("%c\n",strs[1]);                 //访问单个字符串
printf("%c\n",*(strs+1)); 
hello,world!
e
e

注意:由于字符指针指向的常量区存放在常量区,因而程序中只有读取权限,而没有修改权限。如xia下面的操作,编译器可能会通过,但在运行时会出现段错误(Segment Fault)或者写入位置错误。

strs[1]='0';         //错误,没有修改权限
*(strs+1)='0';       //错误,没有修改权限

字符数组
定义及初始化:

char str1[]={'H','e','l','l','o',',','w','o','r','l','d','!'};
char str2[]="Hello,world!"

将12个字符分别赋给str[0]到str[11]12个元素。如果花括号中提供的字符个数大于数组长度,则按语法错误处理;若小于数组长度,则只将这些字符数组中前面那些元素,其余的元素自动定为空字符(即'\0')。
在C语言中,并没有特定的字符串类型,通常是将字符串放在一个字符数组中。然而我们比较关心的是字符串的长度,而不是字符数组的长度,因此通常在字符串的末尾加上'\0',表示字符结束的标志。在读取字符串时也已只读到'\0'为止。
因此也可以使用下面的方法定义初始化字符串:
char str2[]="Hello,world!"
但是字符数组定义之后再赋值时只能逐个进行赋值而不能一次统一赋值,如下面的操作是错误的:

char str[];
str = "Hello,world!";  //错误

字符数组统一赋值和逐个赋值导致数组大小并不一致,因为单个赋值相当于将字符逐个放入数组元素中,数组并不要求'\0'结尾。而字符串必须以'\0'结尾,如果不加'\0'系统会自动加上。因此

sizeof(str1)=13;
sizeof(str2)=12;

访问方法:

printf("%s",str1);
printf("%c",str2[1]);
printf(""*&str2[1]);  
printf("%c",*(str2));  //不合法

字符数组存储在全局数据区或栈区,在定义和赋值后可以进行修改操作。这是其与字符指针显著的区别。

char str2[]="Hello,world!"
str2[2]='0';              //合法

总结
字符指针与字符数组的作用基本相同,但在涉及到对字符串内容需要修改时,只能选择字符数组,而不能选择字符指针。

参考文献

[1] http://c.biancheng.net/cpp/html/80.html
[2] http://www.cnblogs.com/kungfupanda/archive/2012/06/15/2456931.html
[3] http://blog.csdn.net/u013266600/article/details/50529462

相关文章

  • 003-Tips

    C语言字符数组与字符指针 上面这种操作是不被允许的,指针指向了 字符串常量, 不可以被修改,改成字符数组才可以 字...

  • 字符指针与字符数组

    字符指针 定义及初始化:char *strs="Hello,world!" 字符串中的所有字符在内存中是连续排列的...

  • 11.1 字符串和指针

    关于指针输出字符串 将字符串看作指针 使用指针表示法创建字符串 数组和指针的区别、数组名heart 是常量,指针名...

  • C++ 指针2

    字符指针作为函数参数, 求字符串的长度 比较两个字符串的大小 字符串复制 二维数组与指针 输入全体二维数组, 求元...

  • 再学C语言之指针要点

    C之字符数组 C之指针引用字符串 C语言之数组指针 数组指针:首先它是一个指针,它指向数组指针数组:首先它是一个数...

  • 指针与数组

    基础 方法一:用字符数组定义字符串,用指针访问。 方法二:用指针定义字符串,用数组下标访问。 C语言没有定义字符串...

  • C语言 - 字符串和指针

    字符串和指针 用数组实现的字符串和用指针实现的字符串 根据上例: 用数组实现的字符串str str是char[4]...

  • 7.C语言-指针

    1. 二维数组 2.字符指针变量和字符数组 3. 有关指针的数据类型的小结 4. void指针

  • 第09天C语言(00):笔记总结

    01-指针和数组(新) 02-指针和字符串 03-指针和字符串-注意点 04-指针数组 05-指针变量作用 06-...

  • Android NDK开发之旅4--C语言基础--字符串

    C语音的字符串有两种: 字符数组实现。数组可以修改其中某一个值,不可以整体赋值。 字符指针实现。字符指针不可以修改...

网友评论

    本文标题:字符指针与字符数组

    本文链接:https://www.haomeiwen.com/subject/slyekxtx.html