函数的语句以及数组
语句
;//这个是空语句
lable://有冒号的是标签语句 case default 都算
goto return break continue//跳转语句
7+a;//表达式语句,要有运算符和操作对象(可以是变量或常量)
if switch//选择语句
{}//复合语句
循环语句:
while(表达式){}:首先会执行表达式,然后进入符合语句,再去判断表达式依次循环
do{}while(表达式);:首先会执行复合语句,然后在进入表达式,然后再执行复合语句,依次循环
for(表达式1;表达式2;表达式3){}:先执行表达式1,在进入这个循环的时候,表达式1只执行一次,然后执行表达式2,然后执行符合语句,然后执行表达式3,然后执行表达式2,依次循环。
数组
//数组的定义
int buf[5]; char buf[6];
//初始化
int buf[5] = {1};//这样子表示把第一个元素赋值为1,其他元素系统自动赋值为0
给所有的数组一次性赋值
如果想要一次性给所有的数组赋值,那么可以使用这两个函数bzero()和memset()
- bzero()函数
//函数原型
void bzero(void *s, size_t n);
//包含头文件
#include <strings.h>
函数的作用
传入一个起始地址s,和需要赋值的长度n,然后可以从第一个地址开始的,每一个字节都赋值为\0字符,无返回值
函数参数
| 参数 | 说明 |
|---|---|
void *s |
开始赋值的地址 |
size_t n |
从开始到第n个全部赋值(单位字节) |
| 返回值 | 无 |
- memset()函数
//函数原型
void *memset(void *s, int c, size_t n);
//包含头文件
#include <string.h>
函数的作用
传入一个起始地址s,和需要赋值的长度n,然后将前n个字节都赋值为c,注意是前n个字节。
函数参数
| 参数 | 说明 |
|---|---|
void *s |
开始赋值的地址 |
int c |
赋值的数据 |
size_t n |
从开始到第n个全部赋值,每一个字节都一样的值(单位字节) |
| 返回值 | s的首地址 |
- 无论是定义普通的变量还是数组,数据类型不仅代表定义变量或者元素的宽度,还可以代表偏移一位的大小
//例如,都知道数组名是地址
int buf[5];
//buf+1 --> buf[1],偏移到了下一个元素,也就是说,定义的数据类型可以指定偏移的宽度,buf是第一个元素的地址,+1就代表偏移了4个字节。如果定义的是char型数组,那么+1就会偏移1个字节
int a;//这也是一样的
//&a+1 --> 地址也是偏移了4个字节
- 定义一个数组
int buf[5];如果使用取地址符号&取数组名的地址,&buf那么那就代表整一个数组,意思是地址还是和buf相同的,但是一个代表一个数组的首元素,另一个代表一整个数组 - 也就是在偏移的时候,代表一个数组的只会偏移一个元素的大小,代表一整个数组会偏移一整个数组的大小
int buf[5];//数组的大小为5*4 首地址0x0000 0000
&buf+1 --> 0x0000 0014 加了20个字节刚好一整个数组的大小,
buf+1 --> 0x0000 0004 加了1个字节,刚好一个元素的大小
- 如果数组名和
sizeof单独遇上,int buf[5]; sizeof(buf);那么他会表示整个数组的大小,意思是得出来的结果是4*5=20,也就是一个数组的大小20,注意只有单独遇上,有运算符都不行

浙公网安备 33010602011771号