@【C】浙江大学程序设计入门——C语言指针与字符串【八】
指针
sizeof
是一个运算符,给出变量或类型所占据的字节
运算符&
scanf(“%d”,&i)里的&
取得变量的地址,它的操作符必须是变量
地址的大小是否与int相同取决于编译器
指针就是保存地址的变量
变量的值就是内存的地址
*运算符可以访问指针值所表示的地址上的变量
传入函数的数组其实是个指针,但是可以用[]进行
数组变量是特殊的指针
数组变量本身表达地址
数组变量是const的指针
int b[] int* const b
字符类型
char是一种整数也是一种特殊的类型:字符
混合输入
scanf("%d %c",&i,&c)
中间有空格 会把空格读取
逃逸字符
字符串
以0结尾的一串字符
0或’\0’是一样的
0标志字符串的结束,但不是字符串的一部分
字符串以数组的形式存在,以数组或指针方式访问,多用指针
C语言的字符串是以字符数组形式存在的
不能用运算符做运算
字符串常量
char *s="hello"
s是一个指针,初始化为指向一个字符串常量
由于这个常量所在的地方,所以实际上s是const char* s,但是由于历史原因,编译器接受不带const的写法
试图对s所指的字符串写入会导致严重后果
char s[] = "hello"
需要修改字符串,应该使用数组,会把不可写的hello内容拷贝到此数组中
做字符串用指针还是数组?
数组:这个字符串在这里
作为本地变量空间自动回收
指针:这个字符串不知道在哪里
处理参数
动态分配空间
字符串可以表达为char形式
char不一定是字符串,可以是单个字符
字符串计算
字符串函数
size_t strlen(const char *s)
返回s的字符串长度(不包括结尾的0)
int strcmp(const char *s1,const char *s2)
比较两个字符串,返回0 相等 1 左大 -1 右大