字符串
字符串变量
char *str ="hello";
?
char word[] ="hello";
?
char line[10]="hello";
?
字符串常量
-
"hello"会被编译器编译成一个字符数组,这个数组的长度为6,(结尾是表示结束的0) -
两个相邻的字符串(中间没有其他符号)会被连接起来 char*s="Hiello,world!";这里的S是一个指针,初始化为指向一个字符串常量 。 -
不要对S所指的字符串做写入:S[0]=x; -
如果需要修改字符串,应该用数组:char S[]="Hello,world!";
数组:字符串在这里作为本都变量空间自动被回收
指针:不知道字符串的位置
一般用作处理参数和动态分配空间
因此
构造字符串用数组
处理字符串用指针
<!--只有char*所指的字符数组有结尾0,才能说它所指的是字符串-->
空字符串
表示这是一个空的字符串,buffer[0]=='\0
表示这个数组的长度只有1!
字符串数组
或者a[]={} 其中a[0]相当于char;
<!--switch语句可以用字符串数组写-->
单字符的输出与输入
int putchar(int c);
输出一个字符
当输出不能用了会返回EOF
int getchar(void);
从标准输入读入一个字符
string.h
返回两个不相等字符的差值。
-
strcpy -
charstrcpy(char * restrict dst, const char *restrict src); -
把src的字符串拷贝到dst -
返回dst 复制字符串 char * dst =(char * )malloc(strlen(src)+1); strcpy(dst,src);
枚举法
-
枚举使用户定义的数字类型,它用关键字 enum以如下语法来声明: -
enum+名字{名字1 名字2.......} -
大括号里面的名字是字符常量,它们的类型是int,值则依次从0到n: -
enum colors{red,yellow,green}; #include <stdio.h>
enum color{red,yellow,green};
int main(int argc,char const *argv[])
{
? ?int color=-1;
? ,char *colorname=MNLL;
? ?scanf("%d",&color);
? ?switch(color)
? {
? ? ? ?case red:colorname="red";break;
? ? ? ?case yellow:colorname="yellow";break;
? ? ? ?case green:colorname="green";break;
? ? ? ?defauit: colorname="unknown";break;
? }
? ?printf("你喜欢的颜色是%s\n",colorname);
? ?return 0;
} -
枚举的量可以用作值 -
枚举类型可以跟上enum作为类型 -
实际上enum可以看作int来对数据进行输出输入 #include <stdio.h>
enum color{red,yellow,green};
void f(enum color c);
int main(void)
{
? ?enum color t =red;
? ?scanf("%d",$t);
? ?f(t);
? ?return 0;
}
void f(enum color c)
{
printf("%d\n",c);
}
结构类型
声明结构类型
声明结构的形式
1.
struct point{
? ?int x;
? ?int y;
};
struct point p1,p2;
2.
struct point{
? ?int x;
? ?int y;
}p1,p2;
3.
struct {
? ?int x;
? ?int y
}p1,p2;
结构成员
数组中有很多单元;结构里面有很多成员。但数组的单元必须是相同类型的,而结构的成员不一定是相同的。
结构运算
例如: (数组不可以做如下运算)
-
pl=(struct point){5,10}; -
相当于pl.x=5;pi.y=10; -
pl=p2; -
相当于pl.x=p2;pl.y=p2.y;
struct date *pDate=&today;
结构作为函数参数(与数组不同)
|