C语言学习(六)指针3 字符串与指针

字符串与指针

1.用字符指针指向一个字符串

char* str = “Hello”;

C语言对字符串常量是按字符数组处理的,因此这里实际上是把字符串第一个元素的地址赋给str



2.a字符串复制给b字符串


方法1


voidmain() {

charstr1[] = "hello world!";

charstr2[20];

inti;


for(i= 0; *(str1+i) != '\0'; i++) {

*(str2+i)= *(str1+i);

}


*(str2+i)= '\0';


printf("%s\n",str1);

printf("%s\n",str2);

}


方法2:用指针变量来处理


voidmain() {

charstr1[] = "hello world";

charstr2[20];

char*p1,*p2;

/*将两个字符串的首地址赋值给两个指针变量*/

p1= str1; p2 = str2;


for(;*p1 != '\0'; p1++,p2++) {

*p2= *p1;

}


*p2= '\0';


printf("%s\n",str1);

printf("%s\n",str2);

}



3.字符指针作函数参数

将一个字符串从一个函数传递到另一个函数,可以用地址传递的方法,即用字符数组名作参数,也可以用指向字符的指针变量作参数。在被调函数中可以改变字符串的内容,主调函数中得到被改变的字符串。

例如:用函数调用实现字符串的复制

方式1:用字符数组作参数


voidmain() {

voidcopy(char str1[],char str2[]);


charstr1[] = "hello";

charstr2[] = "hello world";


printf("beforecopy str1 = %s , str2 = %s \n",str1,str2);

copy(str1,str2);

printf("aftercopy str1 = %s , str2 = %s \n",str1,str2);

}


voidcopy(char str1[],char str2[]) {

inti = 0;

while(str1[i]!= '\0') {

str2[i]= str1[i];

i++;

}

str2[i]= '\0';

}


输出:

beforestr1 = hello,str2 = hello world

afterstr1 = hello,str2 = hello


方式2:用指针变量作参数


voidmain() {

voidcopy(char * str1,char * str2);


charstr1[] = "hello";

charstr2[] = "hello world";


char* s1,* s2;

s1= str1;

s2= str2;


printf("beforecopy str1 = %s , str2 = %s \n",str1,str2);

copy(s1,s2);

printf("aftercopy str1 = %s , str2 = %s \n",str1,str2);

}


voidcopy(char * str1,char * str2) {

while(*str1 != '\0') {

*str2 = * str1;

str2++;

str1++;

}

*str2 = '\0';

}

输出:

beforestr1 = hello,str2 = hello world

afterstr1 = hello,str2 = hello


4.虽然用字符数组和字符指针变量都能实现字符串的存储和运算,但它们是有区别的:


a)字符数组由若干元素组成,每个元素中存放一个字符;字符指针变量中存放的是地址。

b)赋值方式。字符数组只能对各个字符赋值,不能用以下办法对字符数组赋值:


charstr[14];

str= “hello”;

而对字符指针变量,可以采用下面的方式赋值:

char* a;

a= “hello”;


注意赋给a的是字符串首元素的地址。

文章链接:http://blog.csdn.net/murongshusheng/article/details/8690593



你可能感兴趣的:(C语言学习,C语言,c,数组)