1. 字符数组
存放字符量的数组
#include<stdio.h>
void print_str(char str[]){
int i=0;
printf("\nstring = ");
while(str[i]!='\0'){
printf("%c",str[i]);
i++;
}
printf("\n");
}
void copy_str(char str1[], char str2[]){
int i=0;
while(str1[i]!='\0'){
// *(str2+i) = str1[i];
str2[i] = str1[i];
printf("str1[%d] = %c ",i,str1[i]);
i++;
}
str2[i] = '\0';
}
int main(){
//默认strint1[] = string1[15];
//string2[] = string2[12];
// char string1[] = "hello worldttt";
// char string2[] = "world hello";
char string1[30] = "hello worldttt";
char string2[30] = "world hello";
printf("string1 = %s\n",string1);
printf("string2 = %s\n",string2);
//不初始化数组大小时,拷贝结果
//string1 = tt;
//string2 = hello worldttt;
//因为,string1[15],string2[12]
copy_str(string1,string2);
// int i;
// for(i=0;*(string1+i)!='\0';i++){
// *(string2+i) = *(string1+i);
// }
// *(string2+i) = '\0';
// printf("string1 = %s\n",string1);
// printf("string2 = %s\n",string2);
print_str(string1);
print_str(string2);
return 0;
}
2. 字符指针
字符指针指向的是一个字符串常量的首地址,即指向字符串的首地址
静态区字符串不可修改
#include<stdio.h>
void print_str(char *str){
printf("string = %s\n",str);
}
void copy_str(char *str1, char *str2){
char *from = str1, *to = str2;
// while(*from!='\0'){
// *to++ = *from++;
// }
// *to = '\0';
/*
while((*to = *from)!='\0){
to++;
from++;
}
*/
while(*to++ = *from++){
;
}
}
int main(){
char *string1 = "hello world11111";
char *string2 = "world hello";
char string3[] = "world hello11";
print_str(string1);
print_str(string2);
printf("string3 = %s\n",string3);
printf("*string3+5 = %s\n",string3+5);
//不可写,报错,静态区字符串不可修改
// copy_str(string1,string2);
// printf("string1 = %s\n",string1);
// printf("string2 = %s\n",string2);
//成功运行
copy_str(string1,string3);
printf("string1 = %s\n",string1);
printf("string3 = %s\n",string3);
return 0;
}
3. 字符数组与字符指针的区别
- 字符数组由若干个元素组成,每个元素放一个字符,
字符指针变量中存放的是地址(字符串第一个字符的地址),绝不是将字符串放到字符指针变量中。- 赋值方式
对字符数组只能对各个元素赋值,不能用以下办法对字符数组赋值
char str[20]; str = "hello world";
对字符指针变量则可,char *a; a = "hello world"
,赋给a的是字符串第一个元素的地址- 定义一个字符数组,编译时为它分配内存单元,他有确定的地址,定义一个字符指针时,给指针变量分配内存地址。
- 上例中
*string3+5 = hello11
, ∗ s t r i n g 3 + 5 *string3+5 ∗string3+5将字符指针首地址向后移,输出字符串