不要眼高手低
文章目录
- 第09次直播 gets()与puts()
-
- 问题引入
- 常见字符串函数的使用
-
- strcpy
- strcmp
- 第09次直播 指针
-
- 指针的定义
- 取值符与取地址符
- 第10次直播 指针的应用
-
- 指针的使用场景
-
- 指针的传递
- 指针的偏移
第09次直播 gets()与puts()
上次直播思考
- 思考: 为什么在打印整型数组的时候需要传递数组的长度,而在打印字符数组的时候不需要传递
解法如下: 巧妙利用字符串结束标志为 '\0'
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>void print(char d[]) {
int i = 0;while (d[i] != '\0') {
printf("%c", d[i]);i++;}printf("\n");
}int main08() {
char c[10] = "hello";print(c);printf("Hello world");return 0;
}
注意:
- 不能使用gets的VS,请使用下面操作 等价于
fgets(c, sizeof(c), stdin);
fgets
相对于gets去读取标准输入时,会把\n
放到字符数组中,即为把输入回车结束,也进行存储。
解决方法如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>int main() {
char c[100];fgets(c, sizeof(c), stdin);int len = strlen(c);c[len - 1] = '\0';puts(c);return 0;
}
问题引入
scanf
通过%s
读取字符串时,当遇到空格以后,就会匹配结束,这样没办法把一行带有空格的字符串存入到一个字符数组中心puts
只能输出字符串
常见字符串函数的使用
strcpy
char *strcpy(char *to, const char *from)
strcmp
strcat
拼接两个字符串,目标数组要能够容纳拼接后的字符串
第09次直播 指针
指针的定义
- 使用指针的需求 将某地址保存下来
- 指针使用的场景 传递与偏移
指针的定义格式如下
基类型 * 指针变量名
取值符与取地址符
- 取地址操作符为
&
,也称引用,通过该操作符我们可以获取一个变量的地址值;取值操作符为*
,也称解引用,通过该操作符我们可以得到一个地址对应的数据。如下图所示,我们通过&i
获取整型变量i的地址值,然后对整型指针变量p进行初始化,p中存储的是整型变量i的地址值,所以通过第12行的*p
就可以获取整型变量i的值。P中存储的是一个绝对地址值,那为什么取值时会获取4字节大小的空间呢?这是因为p为整型变量指针,每个int型数据占用4字节大小的空间,所以p在解引用时会访问4字节大小的空间,同时以整型值对内存进行解析。
- 总结:
*
取值(解引用)&
取地址 (引用)
第10次直播 指针的应用
指针的使用场景
指针的传递
- 函数调用的 值传递与引用传递
值传递
引用传递
-
因为传递过去的是地址,所以然后使用解引用即可。
-
这也就是为什么,数组可以通过
arr[1] = 6
; ,进行修改值,数组传递的就是指针。
指针的偏移
- 数组名
a
类型是数组,a
里边存了一个值,是地址值,是数组的起始地址,
运用,这种指针偏移技术可以巧妙的输出数组的元素