字符型别的资料
char 可以用来存储一个字符
如:
char ch=‘h’;
存储的就是h这个字符
但是,我们通常需要使用的都是字符串,而不是单个字符
C语言中可以用字符数组 (char[]),来表示字符串
<string.h>中提供处理字符串的函数
char str[]={'h','e','l','l','o'};
一串字符就可以这样表示
如何印出一串字符
和数组的印法一样
可以写一个函数
void strprint(char str[]){
int i;
for(i=0;i<5;i++){
printf("%d",str[i]);
}
}
只需要在main中呼叫函数,就可以印出一串字符
和之前数组的问题一样,函数第三行的5是字符的长度,在这里是被写死了
所以我们也需要一个标记字符 '\0'
在字符串中我们用0号字符来标记
当字符串加上 '\0' 后
char str[]={'h','e','l','l','o','\0'};这个字符数组就成为了字符串
上边的函数就可以写成这样
void strprint(char str[]){
int i;
for(i=0;str[i]!='\0';i++){
printf("%d",str[i]);
}
}
上面的字符串只有6个字符,那如果我们想要输入12个,甚至更长的字符串时
要打很多的 '' 就会很烦
C语言中,字符串还可以这样表示
char str[]="hello world";
这样就会方便很多,上面这个例子就有12个字符,空格也算字符
那怎么数也只有11个啊,其实C语言在hello Word自动的给你补上了一个 '\0'
就是说当 定义字符串时 []内没有填数字,就会自动给你补一个 '\0'
那如果 char str[15]="hello world";呢?
我们定义了长度为15个char的字符串可以上面只有11个字符,那剩下的就会给你补上4个 '\0'
而 char str[11]="hello world"这个的最后是不会补上 '\0' 的
这里补充一个scanf的知识点
其实我们在使用scanf时,是在从stdin的库中读取数据(名称叫做,标准输入)
在使用者还没有按下enter键时scanf从stdin中读取不到数据,就会卡住
知道使用者,从键盘输入一些数据,并按下enter键时,这些数据就会被存入stdin之中
这个时候scanf才会顺利的执行下去
/*指针也是一种型别
可以用来存放变量的地址(变量必须是明确的)
比如:
int count =9;
int *countaddr = &counr;
&是取址运算符,可以读取变量的地址,但是,这变量的地址,只能存放在指针中
强行运行的话编译器会给出警告
相应类型的变量,地址只能存放在相应类型的指针
如:
double a;
double *aaddr=&a;
a的类型是double,所以double的地址只能存放在double类型的指针中
变量的地址是固定的,也就是一个变量从出生到死他的地址都不会变
如果
int b=9;
int* baddr=b;
那么*baddr就表示b
*的后面必须是地址,也就是指针
*/
#include<stdio.h>
void add(int* p){
*p=*p+1;
}
int main()
{
int a=2;
add(&a);
printf("%d",a);
return 0;
}
/*在之前函数的时候,说过一个变量的存活范围是它所在的花括号
函数中的变量在函数结束以后就会消失,而且对原本传入函数的值没有任何影响
但是指针就不一样了,指针可以通过修改地址中的变数,从而影响到这个地址中的变量
|