当前位置:文章写作网 >日记 >日记 >c语言之字符串与指针

c语言之字符串与指针

2009-01-12 16:02 作者:tshfang 阅读量:25644 推荐64次 | 我要投稿

1.概念

字符串是存放在字符数组中的,对字符数组中的字符逐个处理时,通常将字符串作为一个整体来使用,用指针来处理字符串更加方便。当用指向字符串的指针来处理字符串时,并不关心存放字符串的数组大小,而只关心是否已处理到字符串的结束符。

使用指针进行字符串的拷贝:

#include <stdio.h>

#include <stdlib.h>

int main()

{

char strfrom[30]="i am a good student";

char strto[30]="0";

char *p1=strfrom;

char *p2=strto;

printf("kao bei qian \n ");

printf("strfrom is: %s\n",strfrom);

printf(" strto is: %s\n",strto);

for(;*p2++=*p1++;);

printf("kao bei hou \n ");

printf("strfrom is: %s\n",strfrom);

printf(" strto is: %s\n",strto);

return 0;

}

*p2++=*p1++ 等价于下列三条语句,

*p1=*p2; // s2[i]=s1[i],将指针p1所指s1[i]赋给指针p1所指s2[i]。

p1++; //指针p1加1指向s1的下一个元素

p2++; //指针p2加1指向s2的下一个元素

上述语句不断循环,直到p1指向结束字符'\0'=0时,for 语句因条件为假而结束。从而完成字符串s1拷贝到字符数组s2的任务。

2.字符型指针变量与字符数组的区别

(1)分配内存

设有定义字符型指针变量与字符数组的语句如下:

char *p ,str[50];

则系统将为字符数组str分配50个字节的内存单元,用于存放50个字符。而系统只为指针变量p分配4个存储单元,用于存放一个内存单元的地址。

(2)初始化赋值含义

字符数组与字符指针变量的初始化赋值形式相同,但其含义不同。例如:

char str[50] ="I am a student ! " ;

char *p="You are a student ! " ;

对于字符数组,是将字符串放到为数组分配的存储空间去,而对于字符型指针变量,是先将字符串存放到内存,然后将存放字符串的内存起始地址送到指针变量p中。

(3)赋值方式

字符数组只能对其元素逐个赋值,而不能将字符串赋给字符数组名。对于字符指针变量,字符串地址可直接赋给字符指针变量。例如:

str="I love C! "; //字符数组名str不能直接赋值,该语句是错误的。

p="I love C! "; //指针变量p可以直接赋字符串地址,语句正确

(4)值的改变

在程序执行期间,字符数组名表示的起始地址是不能改变的,而指针变量的值是可以改变的。例如:str=str+5; //错误

p=str+5; //正确

其他人在看啥

    《c语言之字符串与指针》的评论 (共 0 条)

    • 黑色星期五::han 还是不懂!
    • liuxiufu:多发表点,不错!
    • Guest::ding
    • Guest:谢谢了,这个问题已经困绕我好久了:good
    • Guest::)