字符串初学习
一:字符串
#include<stdio.h> int main(void) {
printf("\"Run, spot ,run\" exclaimed dick.\n");//如果要在字符串内部使用双引号,必须在双引号前加上一个反斜杠(\) printf("%s , %p , %c\n","we" , "are" , *"space farers"); // 根据%s转换说明打印字符串,根据%p转换说明打印一个地址(打印的该字符串的首字符的地址) //*"space farers" 表示该字符串所指向地址上所储存的值,打印的是字符串的首字符 return 0;
}
-
构造一个字符串->用数组
-
处理一个字符串->用指针
-
%s是字符串的转换说明
// 1. char a[][10] -->表示 a[0]-->相当于 char[10] // 2. char *a[]-->表示a[0]-->相当于char* a (指针数组)
可以把1想象成矩形二维数组,每行的长度都是10; 把2想象成不规则的数组,每行的长度不同
二:数组与指针的区别
#include<stdio.h> int main(void) { char heart[] ="I love Tillie"; const char*head ="I love Millie"; int i; for(i=0;i<6;i++){ putchar(heart[i]); }putchar('\n'); for(i=0;i<6;i++){ putchar(head[i]); }putchar('\n'); }
运行结果:
I love I love
主要区别:数组名heart是常量,而指针名head是变量。
-
两者都能进行指针加法操作:
for(i=0;i<6;i++){ putchar(*(heart+i)); }putchar('\n'); for(i=0;i<6;i++){ putchar(*(head+i)); }putchar('\n');
运行结果:
I love I love
-
但只有指针表示法能够进行递增操作:
while(*(head) !='\0'){//在字符串末尾处停止 putchar(*(head++));//打印字符串,指针指向下一个位置 }
运行结果:
I love Millie
-
想让head 和heart统一,可以这样做:
head=heart;//head现在指向数组heart
这使得head指针指向heart数组的首元素
但是不能做
heart=head;
复制运算符的左侧必须是变量
-
还能改变heart数组中的元素信息:
heart[7]='M';//或者*(heart+7)='M'
-