1.5 C语言基础 2022.8.26

rand()函数需要的头文件是:<stdlib.h>

rand() 伪随机队列  得手动设置种子 但设置后还是伪随机

用srand()设置种子

设置种子后,再调用rand()函数,实现随机

time(),无参数时,默认存储到默认指针内,如果传入空指针,则返回 无符号整数的当前时间

time()需要包含<time.h>头文件

srand(time(0));种子一直在变 实现了真正随机

可以写成srand((unsigned)(time(0))) 为了可读性 不然是隐式转换

for()循环内三个表达式都可以省略,但;一个都不能省,如果第二个表达式省略,则默认为真,无限循环。

goto可以在函数内任意的跳转!函数内!!!!goto可用来进行错误处理和跳出外层循环。

栈是由高地址向低地址生长的。每次调用会生成一个栈帧

条件运算符

三目运算符 ?:

e1?e2:e3; 

数组

数组是如何划分为大小相等的空间的,为什么要这么做?

存放同一类型的元素,为了实现随机访问。

数组下标为何从0开始?

若数组下标从1开始  则地址=首地址+(i-1)*sizeof(elemtype)  i-1没有直接用i效率高

或者直接首地址处空着不用 两种都会导致资源的浪费

因此从0开始。

为什么一般来说数组的效率优于链表?

数组可以更好的利用CPU缓存机制    数组->空间局部性  可以直接在高速缓存中访问

链表不仅需要存取数据,还需要存指针域

数组初始化

数组大小应该在编译期间能够确定。

a[10]={1,2}  后面元素,自动赋值为0;  如果括号内值的数量大于数组大小,则出错。

#define Size(a) (sizeof(a)/sizeof(a[]))

二维数组 

 实际中,按行优先存储。

二维数组本质是:元素是一维数组的数组。

int a[3][4]={{1,2,3,4},{2,2}};其余会自动清0

int a[3][4]={1,2,3,4} 会按顺序依次填充  不推荐 可读性差

int a[3][4]={0}; 全部清0 

int a[][4]; 列不能省略

数组的长度,编译器可以推算,但元素类型不可以。a[1]和a[2]不是同一类型。

int a[][]={{1,2},{2,4}};  错误,二维数组本质,必须得确定数组里存储什么类型的数据 。 

常量数组

const a[] 里面的元素不可更改 

函数

数学上的函数必须有参数,必须有返回值,但不会造成副作用

C语言上的函数可以没有参数,可以没有返回值,但可能会造成副作用

函数的定义

返回值类型 函数名(参数列表) { 语句}

参数的传递(C语言里只有值传递)

想保留值的更改,应该传入指针。

当数组指针作为参数传递时,会退化为指针,指向数组第一个元素的指针。

缺点:丢失了类型信息,丢失了数组长度。优点:可以避免大量复制数据,否则会复制整个数组。//可以修改原数组的元素,调用也更加灵活,可以传递进去一个比数组长度小的值,对他们进行处理。

能否把一个列数不固定的数组 传入参数

 一个一维数组  每个元素是一个指针  每个指针指向一个一维数组

传递一个指针数组  即数组里存放的元素类型是指针

int* a[];

C语言中 返回值类型不能是数组类型

程序如何终止 

操作系统调用main 就是进程的开始

main函数返回时,就标示着程序的终止。

如何不在main函数中,终止程序?  exit(退出状态码)函数;  状态码=0,表示正常退出,其他值都表示异常退出。

EXIT_SUCCESS 宏 等价为0

EXIT—FAIL  等价为1

局部变量和外部变量

这俩变量的属性:作用域 、存储期限

局部变量:定义在函数内的变量。

                   作用域:块作用域,{ }从变量定义开始,到块末位。

                     存储期限:默认为自动存储期限,如果加了static则变为静态存储期限

外部变量:定义在函数外的变量。

                  作用域:文件作用域,从变量定义开始,到文件末尾。

                    存储期限:静态存储期限

自动存储期限:存放在栈里面的数据,变量的生命周期随着栈帧的开始而开始,随着栈帧的消亡而终止。

静态存储期限:拥有永久的存储单元,在程序的整个执行期间一直存在。

如foo(void)

{

static int i=0;

printf("%d,%p",i++,&i);

foo();

}打印出来的数据只会是i  因为从头到尾都是一个变量 。

数据段和代码段的数据拥有静态存储期限,栈里的有自动存储期限。堆里的数据需要程序员自己管理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值