#include<stdio.h>
//void copy(char a[],char b[]) //定义一个复制字符串的函数
void copy(char *a, char *b) //等价于传入数组名
{
int i;
for(i =0; a[i] != ‘\0‘; i++)
{
b[i] = a[i];
}
b[i] = ‘\0‘; //在末尾手动加入‘\0’结束字符串复制,以免在末尾出现未知字符
}
//总结,调用函数时,不管是传入数组名还是字符指针,本质上是一样的,编译器会把数组名当作指针变量处理
//函数的形参也是同样的道理
int main(void)
{
char str[] = "i love you"; //其实最后一个字符是‘\0’,字符串的结束标值,但是打印不出来
printf("%s\n",str);
printf("%c\n",str[7]);
printf("%c\n",*(str + 7)); //用指针的方式输出
char * li = "wo shi dahema"; //声明一个字符型指针变量,存储的是字符串首字符的地址
printf("%s\n",li);
printf("%c\n",li[7]);
printf("%c\n",*(li + 7));
int a[] = {1,2,3,4,5,6,7,8,9};
//int * a = {1,2,3,4,5} //报错,其他类型无法这样使用
printf("%d\n",a);
printf("%d\n",a[5]);
printf("%d\n",*(a+5));
//字符串的复制
char str_copy[15];
for(int i=0; str[i] != ‘\0‘; i++)
{
//*(str_copy + i) = *(str + i); //把每个字符依次赋值
str_copy[i] = str[i]; //同理
}
printf("复制后的字符串:%s\n",str_copy);
//字符串的复制方法二:
char str_copy2[15];
char *x, *y;
x = str;
y = str_copy2;
for(;*x != ‘\0‘; x++,y++)
{
*y = *x;
}
printf("复制后的字符串2:%s\n",str_copy2);
//用函数实现复制
char string[] = "I am the king of the world.";
char string_copy[30];
char *p, *q;
copy(string,string_copy); //传入数组名
p = string;
q = string_copy;
//copy(p,q); //等价于入传入数组名
printf("%s\n",string);
printf("%s\n",string_copy);
return 0;
}