字符串是一个字符数组,但是以“\0”结尾,"\0"就是表示0,所以字符串就是以0结尾的字符数组。输出是使用“%s”。
字符串的定义如下:
#include<stdio.h>
int main(){
//字符串的定义方式,可以用数组,也可以用指针。
//这里后面的e会被忽略,因为“\0”就已经结尾了。
char str[11] = {'g','o','o','d','D','a','y','!','\0','e'};
printf("%s\n",str);
char str1[] = "good Day!";
printf("%s\n",str1);
char* pStr = "good Day!";
printf("%s\n",pStr);
return 0;
}
char *strcpy(char* str, const char *from);
拷贝函数,strcpy函数第一个参数str必须是指向一片有效内存,如下:
#include<stdio.h>
#include<string.h>
int main(){
char str[11] = {'g','o','o','d','D','a','y','!','\0','e'};
printf("%s\n",str);
char str1[] = "good Day!";
printf("%s\n",str1);
char* pStr = "good Day!";
printf("%s\n",pStr);
//pStr[0]='f';//字符串指针是常量,不能改变其值,上面用数组定义的字符串则
可以
char string[80];//分配在栈上的长度80的有效内存(不是用malloc分配,所以是在栈上)
//char* string 则可能会出错,因为string没有指向有效的内存。
strcpy(string,"hello world from ");
printf("%s\n",string);
return 0;
}
#include<stdio.h>
int main(){
char* pDays[3];//存放指针的数组。数组名就是数组首地址,也就是指向数组第一个成员的指针。所以pDays就是指向pDays[0]的指针,而pDays[0]也是一个指针,是指向“sunday”字符串数组的首地址的指针,内容就是“s”,所以pDays就是指向指针的指针。
pDays[0] = "sunday";//每个数组成员是一个指针,并且这个指针指向了一个字符串数组首地址。
pDays[1] = "monday";
pDays[2] = "tuesday";
char** pWalker,**pLast;//指向指针的指针。
pLast = &pDays[2];
for(pWalker = pDays;pWalker<=pLast;pWalker++){
printf("%s\n",*pWalker);//这里输出用的是*pWalker如果用**pWalker,那么,输出要用%c,并且输出“s”“m”“t”,就是首字母,*pWalert是一个指针,所以用“%s”输出则是直接打印出该指针指向的内容,但是如果是**pWalker,那么,就是指向指针的指针,比如是pDays[0]指向的字符串的首地址,其内容是“s”,所以输出s。
}
return 0;
}
预处理就是编译前会将对应内容替换成预先指定的内容,如#include<stdio.h>就是一个预处理指令,编译前将这个地方用stdio.h的内容替换掉了。
#include<stdio.h>
int main(){
printf("asdfasdfsadf\n");
int i;
for(i=0;i<10;i++){
printf("%d \n",i);
}
//枚举类型!用字符代表数字,默认是从0开始,也可以自己赋值。
enum xz{fangkuai,yuanxin};
enum xz f=fangkuai;
if(f==fangkuai){
printf("f is %d\n",f);
}
enum weekday{sunday,monday,tuesday};
enum weekday today;
int val=0;
scanf("%d",&val);
today = val;
if(today==sunday)
{
printf("today is sunday\n");
}
return 0;