当前位置: 代码迷 >> 综合 >> C语言督学营 (Day9-Day10)
  详细解决方案

C语言督学营 (Day9-Day10)

热度:38   发布时间:2023-12-11 20:56:40.0

不要眼高手低

文章目录

  • 第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里边存了一个值,是地址值,是数组的起始地址,

在这里插入图片描述

运用,这种指针偏移技术可以巧妙的输出数组的元素

在这里插入图片描述