运算符&:
作用:获取变量的地址,他的操作数必须是变量,不是变量不能取地址。
因为c语言的变量是放在内存中的,变量放在哪个地方就有地址。
地址大小与int是否相等,取决于编译器。
需要输出地址——int i;printf(“%p”,&i)
指针:
保存获取的地址的变量。
注意:int* p,q和int *p,q都表示p是一个指向int的指针变量,而q则是一个普通变量。
变量的值是指针的地址;普通变量的值是实际的值,而指针变量的值是别的变量的地址。
*,一个单目运算符,用来访问指针所表示的地址的变量
函数参数表里的数组其实是指针,可以用数组的运算符[]进行运算,在函数中,计算sizeof(a)=计算sizeof(int *)
数组是特殊的指针,因为数组变量本身就表达地址,所以不需要用&来取地址,但数组单元表达的是变量,需要用取地址符&来取地址。
*运算符可以对指针做,也可以对数组做。
数组变量是常量指针,所以不能被随意赋值。
字符类型:
字符的输入输出:
#includeint main(){ char c; int i; c=i; scanf("%d",&i); printf("c='%c'n",c); printf("c=%dn",c); return 0; }
如果%d后面没有空格,说明整数只读到整数结束为止。
字符计算:
在ASCLL表中数字0——9依次排列,0最小,9最大;字母在ASCLL表中按顺序排列,大写字母和小写字母是分开排列的,a+'a'-'A'可以把大写字母变成小写字母,a+'A'-'a'可以把小写字母变成大写字母。
逃逸字符:
字符串:
以整数0结尾的一串字符,写成‘ ’ ,‘ ’表示字符串的结尾,但本身却不是字符串的一部分,计算字符串长度时不包括结尾这个零,字符串以数组的形式存在,访问时可以以数组或者指针的形式,多数以指针的形式
字符串常量:
例如:“Hello",会被编译器变成字符数组放在某处,这个数组长度为6,因为还有结尾的0;相邻的字符串自动连接成为一个大的字符串。
c语言的字符串是以字符数组的形式存在,不能用运算符对字符串进行运算,但可以遍历字符串。
在c语言中,字符串的字面量可以用来初始化字符数组。
char*s="Hello World"里s所指的字符串不能写入,如果想要修改字符串,可以用数组的方式:char s[]="Hello World"
字符串以指针的形式表达:用来处理参数,用来动态分配空间;以数组的表达:这个字符串就在这里,以本地变量的方式被自动回收。两种不同的表达方式。
char*未必是字符串,只有当它所指的字符数组结尾有0时,才能说它是字符串。
字符串计算:
字符串的输入输出用%s
常见错误:例如:以为chae*string;就是定义了一个字符串类型的变量,但实际上只是定义了一个指针变量(万一是本地变量,本地变量没有默认初始值)没有对string初始化,所以每次运行不一定会成功。
字符串函数,这些函数都放在一个名为string.h的头文件中:
字符串函数:
1.srlen函数:
2.strcmp函数:
3.strcpy函数:
4.strcat函数:
strcpyhestrcat函数都不太安全,尽量不要使用。当然,有安全版本如下图,str后加上n。
strchr表示从左边开始查,strrchr表示从右边开始查。
ps:在vs中用scanf_函数的话,详见:(1条消息) C语言scanf_s()函数的用法_墨梅C的博客-CSDN博客_scanf_s
在有些时候并不需要传入字符串长度的参数
像scanf_s()函数要求输入的类型是%c(单个字符)、要求输入的类型是%d(十进制整数)、要求输入的类型为%f(浮点型).....等等。换句话,只有当函数要求传入的类型是%s(字符串)时,才要需要传入字符串长度的参数。



