用break跳出当前这一层的循环
用continue跳出当前循环步
switch()
{
case xxx : do ; break ;
default : xxxxx ;break;
}
if ....else 判断问题、匹配问题、{}、比目运算符
死循环 : while(1)
for( ; ; )
跳出死循环: if....break
int a[10];
地址:&a[10]=a a的值就是地址
数组中定义所常见的错误:
float a[0]; //数组大小为0没有意义
int b(2)(3); //不能使用
int k; a[k]; //不能使用变量说明数组的大小
数组元素的赋值: int a[10]={0,1,2,3,4};
若为int a[10]; 则里面的数不为0,是一些垃圾数
二维数组: [行][列]
char [2][4] 占8个字节
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int a[3][4]={{1},{5},{9}};
二维数组的赋值:如果对全部元素都进行赋值,则定义数组的第一维长度可以不指定,但第二维的长度不能省去:int a[][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
C语言中没有string的数据类型
如果数组长度大于字符串实际长度,也只输出到遇’\0’结束
如果一个字符数组中包含一个以上的’\0’,则遇到第一个’\0’的输出就结束,数组中未被赋值的元素值自动置’\0’
用%s格式输出字符串时:printf函数中写的是字符数组名字(地址)而不是数组元素名(值)
: &a[0]=a
字符串处理函数:
puts(字符数组):用puts函数输出的字符串中可以包含转义字符
puts() ()内:字符串/地址
strcpy: strcpy(数组名,数组名/字符串);(第二个数组名:可以通过地址赋值)
strncpy(str1,str2,n) :将str2的前n个字符复制到str1中去
strcmp:字符比较
strlen:测试字符串长度的函数
函数的值为字符串的实际长度,不包括’\0’
strlwr:将字符串中大写字母换成小写字母
strupr:将字符串中小写字母换成大写字母
以上两种,传进去的参数为字符串,也就是地址,均不能传数组元素名,只能传数组名
形式参数:定义函数时函数名后面括号中的变量名
实际参数:调用函数时函数名后面括号的表达式
值传递:
函数调用时,为形参分配单元,并将实参的值复制到形参中,调用结束后,形参单元被释放,实参单元仍然保留并维持原值
特点:形参与实参占用不同的内存单元
:单向传递:只能从实参到形参
地址传递:函数调用时,将数据的存储地址作为参数传递给形参
形参与实参占用的存储单元
双向传递
实参和形参必须是地址常量或变量
*:后面放的是地址
*x:这是一个值 *x=*x+2 改变的是地址上的值
变量的存储类型
| 局部变量 | 外部变量 | |||
存储类别 | auto | register | 局部static | 外部static | extern |
存储方式 | 动态 | 静态 | |||
存储区 | 动态区 | 寄存器 | 静态存储区 | ||
生存期 | 函数调用开始至结束 | 程序整个运行期间 | |||
作用域 | 定义变量的函数或复合语句内 | 本文件 | 其他文件 | ||
赋初值 | 每次函数调用时 | 编译时赋初值,只赋一次 | |||
未赋初值 | 不确定 | 自动赋初值0或空字符 |
几个关键字,后续在进行补充
const
static
volutile
extern