C语言督学营 (Day9-Day10)

不要眼高手低

文章目录

  • 第09次直播 gets()与puts()
    • 问题引入
    • 常见字符串函数的使用
      • strcpy
      • strcmp
  • 第09次直播 指针
    • 指针的定义
    • 取值符与取地址符
  • 第10次直播 指针的应用
    • 指针的使用场景
      • 指针的传递
      • 指针的偏移

第09次直播 gets()与puts()

上次直播思考

  • 思考: 为什么在打印整型数组的时候需要传递数组的长度,而在打印字符数组的时候不需要传递

解法如下: 巧妙利用字符串结束标志为 '\0'

#define  _CRT_SECURE_NO_WARNINGS
#include 

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 
#include 

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 只能输出字符串

C语言督学营 (Day9-Day10)_第1张图片

常见字符串函数的使用

strcpy

char *strcpy(char *to, const char *from)

C语言督学营 (Day9-Day10)_第2张图片

strcmp

C语言督学营 (Day9-Day10)_第3张图片
strcat 拼接两个字符串,目标数组要能够容纳拼接后的字符串

第09次直播 指针

指针的定义

  • 使用指针的需求 将某地址保存下来
  • 指针使用的场景 传递与偏移

C语言督学营 (Day9-Day10)_第4张图片

指针的定义格式如下

基类型   *   指针变量名

C语言督学营 (Day9-Day10)_第5张图片

取值符与取地址符

  • 取地址操作符为&,也称引用,通过该操作符我们可以获取一个变量的地址值;取值操作符为*,也称解引用,通过该操作符我们可以得到一个地址对应的数据。如下图所示,我们通过&i获取整型变量i的地址值,然后对整型指针变量p进行初始化,p中存储的是整型变量i的地址值,所以通过第12行的*p就可以获取整型变量i的值。P中存储的是一个绝对地址值,那为什么取值时会获取4字节大小的空间呢?这是因为p为整型变量指针,每个int型数据占用4字节大小的空间,所以p在解引用时会访问4字节大小的空间,同时以整型值对内存进行解析。

C语言督学营 (Day9-Day10)_第6张图片

  • 总结* 取值(解引用) & 取地址 (引用)

第10次直播 指针的应用

指针的使用场景

指针的传递

  • 函数调用的 值传递与引用传递

值传递
C语言督学营 (Day9-Day10)_第7张图片
C语言督学营 (Day9-Day10)_第8张图片
引用传递

  • 因为传递过去的是地址,所以然后使用解引用即可。
    C语言督学营 (Day9-Day10)_第9张图片

  • 这也就是为什么,数组可以通过 arr[1] = 6 ; ,进行修改值,数组传递的就是指针。

指针的偏移

  • 数组名a类型是数组,a里边存了一个值,是地址值,是数组的起始地址,

C语言督学营 (Day9-Day10)_第10张图片

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

C语言督学营 (Day9-Day10)_第11张图片

你可能感兴趣的:(学习随笔,c语言)