C语言中的指针-通过指针引用字符串-学习笔记-33

引入

前面,我们知道数组和指向数组的指针都可以作为函数参数,那么字符指针能否作为函数参数呢?答案是肯定的。
在 C 语言中,如果我们需要传递字符串,其实传递的是该字符串首元素的地址,这样我们顺着地址移动指针就可以找到这个字符串了。
因为我们传递的是地址,所以改变了该地址后面的元素内容后,主调函数也会同时改变

函数调用的方式实现字符串复制

用函数调用的方式,实现字符串的复制。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
int main(){
void copystr(char a[],char b[]);
char str_a[]="I am Chinese!",str_b[20];
copystr(str_a,str_b);
printf("%s\n",str_b);
return 0;
}
void copystr (char a[],char b[]){
int i;
for(i=0;a[i]!='\0';i++){
b[i]=a[i];
}
b[i]='\0';
}

上面我们定义的 copystr 函数是没有返回值的,我们仅仅是利用角标法,取到了地址后面的值,然后一个一个的赋值给 b。

字符指针的方式实现字符串复制

我们再用字符型指针写一下就是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
int main(){
void copy_str(char a[],char b[]);
char a[]="I am Chinese!",b[20];
char *str_a=a,*str_b=b;
copy_str(str_a,str_b);
printf("%s\n",str_b);
return 0;
}
void copy_str(char a[],char b[]){
int i;
for(i=0;a[i]!='\0';i++){
b[i]=a[i];
}
b[i]='\0';
}

我们的 copy_str 不用动,我们定义两个指针,然后将这两个指针分别赋值为字符数组的地址。然后,我们在实参传递过来的就是字符数组的地址了,然后就像使用数组一样,copy_str 直接遍历赋值。

字符指针作为实参和形参实现字符串复制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
int main(){
void copy_str(char *a,char *b);
char *a="I am Chinese!",b[20];
char *str_a=a,*str_b=b;
copy_str(str_a,str_b);
printf("%s\n",str_b);
return 0;
}
void copy_str(char *a,char *b){
for(;*a!='\0';a++,b++){
*b=*a;
}
}

首先,我们在创建字符串时,用字符数组和字符指针分别创建了字符串。
然后,我们作为实参传递给函数的是字符指针。
接着,我们在函数中,通过移动指针的方式,将 a 的字符串复制到了 b 中。

尾巴

这是我的个人学习笔记,主要是应付考研复习使用,充斥着一些吐槽和个人观点,并不严谨,欢迎大家参考、指正。


-------------The End-------------
欢迎请我喝咖啡哦~!