2021-09-09

数组在传参的时候,真实传过去的是首元素的地址, (&arr[0])用的是指针接受 大小为4;

解决方式:在外面算好,再传上去

随机生成一个数字 使用rand()函数 可能会生成相同的数据 并且范围在0~0x7ffff

rand函数界限:stdlib.h头文件中有宏#define RAND_MAX 0x7fff

rand产生一个0-0x7fff的随机数,即最大是32767的一个数

使用rand()之前,需要调用 srand()函数 并且调用头文件 stdlib.h

srand((unsigned int )time(NULL));

rand()%100+1;

建议使用时间种子:srand((unsigned int)time(NULL));//传入空指针  生成时间种子
//srand确实要在rand之前调用,但是调用一次就足够了  并且可以变得更加随机
// 所以把srand这一行 移到main函数中即可  只调用一次 随机数在game里生成

int ret = rand()%100+1;//%100+1之后 的数字范围就是1~100

 60 是\ddd类型的转义字符

​ 在C99之前,数组的初始化不允许使用变量,

并且,即使是在C99中,使用变量的同时不可以对数组进行初始化 只能 int arr[n];

​ .c文件到.exe需要经过 预编译->编译->汇编->链接.

​ 编译 ->链接.

sizeof(指针) 的大小是4个字节(byte).
  1. double 使用 printf 的时候 是 %f

​ 使用 scanf 的时候 是 %lf

memset初始化的时候,是**以byte为单位初始化**的  

如果出现这样的代码: 

```c
int arr[10]={0};

memset(arr,1,5*sizeof(int)); 
```

当16进制显示的是:   

```c
0x01010101
```

  每一个01都是一个字节  0x后有4个字节

同理,arr的地址也都变成了01的循环
  1. 用函数进行判断计算时 有时候return比break更加好用

  2. 函数必须先声明再使用

  3. 函数的声明 放在 头文件 中, 函数的实现体现在同名的.c文件中

  4. 将声明 定义 实现 分模块使用的好处:

    • b便于多人协作

    • 封装和隐藏

    • add.h 和add.lib 可以打包给test.c 使用 而且保证了add.c的保密性 也确保了功能的实现

  5. 斐波那契数列使用递归非常繁琐,

  6. getchar()的使用:

    为什么返回类型是int呢?

    • 因为getchar是从键盘读取字符,返回的是字符的ascll码值(整数),所以返回的是int类型
    • getchar在读取失败或者结束的时候,返回EOF(-1)
    • scanf可以读很多类型,getchar只能读字符 在读取字符的时候,两者相似

25.scanf和getchar都是从缓冲区读取内容,当缓冲区内没有内容时,才会等待键盘输入,

​ scanf会把\n之前的东西都提取了,剩下\n,

26.当缓冲区内是 abcd en\n的时候(带有空格)

scanf函数读取到空格就会停止,不读了,之后的内容也不会读入内存之中,

并且会在空格处放置一个’\n’来结束读入

可以使用

while ((i = getchar()) != EOF)//当读取到的不是\n的时候,就getchar()吞掉
	{
		getchar();
	}

gets可以直接读取一行,不管是否有空格

  1. 设计函数时尽量做到谁申请谁维护谁释放,否则如果交给外部使用者释放,外部使用者可能不知道或者忘记,就会造成资源泄漏

28.常量字符串不可以修改 例如char* p=“abcdef” 是不可在函数中进行逆序的

​ 应该去使用char* arr []=“abcdef” 再将arr 传入上方函数进行修改

  1. 在函数中可以使用strlen(arr) 求字符串长度 但是不可以求sizeof(arr) 数组大小

    strlen是根据首地址进行计数,直到\0出现,

    sizeof是求空间大小 传入的是首元素的地址,所以在函数中没法使用

  2. 数组在初始化时,不默认赋值的情况下:

    如果是全局变量,则数组内全部放置‘0’

    如果是局部变量,则数组内是随机数字

  3. 当二维数组在初始化的时,如果没有完全赋值的时候,那么空余的均是 0

  4. 二维数组行和列的定义:

    从上到下,依次是行

    从左到右,依次是列

33.我们可以想象二维数组是呈二维分布的,其实他们的地址是连续的(包括不同列的首位)

  1. 为什么可以省略行不可以省略列?

  2. 可以将二维数组 arr[3] [5]看成是:
    三个 一维数组

    每个 一维数组中含有五个元素

  3. printf("%(0)m.nf")

    m -> 最小字段宽度 --> 是最小的字符宽带 就是总长度(包括空格等)

    n -> 精度 --> 是小数点后的位数 (如果长度过长会四舍五入)

    (0) -> 0标志 --> 如果有0标志,则有空补空 变为有空补0

详细见博客——————————
关于定义二维数组时,为什么可以省略行,而不可以省略列の详解

上一篇:2021.08.29 膜你赛


下一篇:NOIP 模拟49