变量四大要素:
例:int a = 1; | 特点 | |
变量名 | a | 不能以数字开头(只能下划线和字母)、区分大小写 |
变量类型 | int | |
变量值 | 1 | |
存储空间 | a的地址 |
变量必须先声明再使用
数据类型 | 说明 | 特点 |
int | 表示整数,最大值是2^位数 | 4个字节,32位 |
float | 表示小数点后7位的小数 | 4个字节,32位 |
double | 表示小数点后16位的小数 | 8 个字节,64位 |
char | 表示一个字母 | 1个字节,8位 |
printf、scanf知识点和注意点
1、printf
例:printf("我的身高和体重分别为%d,%d\n", x, y); | ||
组成部分 | 说明 | 知识点 |
%d | 占位符 | 与变量顺序对应 |
我的身高和体重分别为 | 普通字符 | |
"我的身高和体重分别为%d,%d", | 格式字符串 | 不是一般的字符串 |
x, y | 变量 | |
\n | 换行符 | \是转义字符,/是除号,%是取余数 |
%d | int |
%c | char |
%f | float |
%lf | double |
%s | 字符串 |
%p | 打印内存地址,而不是磁盘地址 |
%x | 十六进制输出 |
强制转换
其一般形式为: (类型说明符) (表达式) 其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。 |
float a = 1.5; |
(int)a;把a强制转换为整数,变成了1 |
scanf:
C 库函数 int scanf(const char *format, ...) 从标准输入 stdin 读取格式化输入。
scanf(占位符,变量地址)
scanf
(
"%d %d"
,&a,&b);
注意点:
&a | &取地址符不能忘 |
字符和空格都要原样输入 | 在scanf中最好别加什么空格和字符 |
%c的时候,空格也相当于一个字符 | |
输入不同的数据类型的时候 | 最好分开 |
不要加入\n | 这种情况,输入一个数字然后敲下回车后,程序还是阻塞着的。 |
条件,循环语句
if...else
注意点
if() { } | 括号中的语句终究会转换成0或1,1才会执行大括号内的代码语句 |
== | 双等号才是判断 |
if 语句后有大括号, 则执行大括号里面所有的语句; 如果没大括号,则只会执行第一条语句. |
switch...else
应用于多个分支且是并列关系
while、for、do...while
for循环语句的循环体如果只有一个语句,则大括号可以省略;如果循环体由多个语句组成,就必须要使用大括号(否则将只把第一个语句作为循环体,而后面的语句则作为“循环体以外”的语句处理)。
continue | 结束本次循环 | 对某一次循环进行跳过 |
break | 结束整个循环 | 循环到达某个标准结束 |
数组
int a[10] | 他表示定义了一个整型数组,数组名为a,此数组有10个整型元素 |
相同的数据类型 | |
从0开始计数,用a[i]来访问第i个元素 | |
常用for循环来赋值,输出 | |
数组是内存当中的连续空间 | |
可以部分赋值 | |
可以直接写成int a[] |
sizeof是个关键字,不是函数,计算大小
*是取值运算符,他把后面跟的内存地址中的东西“取出来”
指针就是地址,地址就是指针
指针变量是变量,是存放地址的变量
int *p | |
* | 这里的*是一个标识符,告诉系统我是一个指针变量, 是用来保存别人的地址的 |
int | 告诉系统,该地址只能存放整型数据 |
如果指针变量类型和存放数据类型不同的情况下,取值的时候会出问题
原因:
取值运算符会根据指针的变量类型,访问不同大小的空间
如:char *c = &a;
a = 0x1234;
则*c的输出为34
指针传参是为了让函数直接操作变量的地址,直接改变变量本身,函数通过*来访问变量地址,直接拿出变量本身的数据,然后进行操作。
类型 | 地址 |
数组 | 数组名就是首个元素地址 |
函数 | 函数名 |
函数指针
函数名称本质上是一个函数的入口地址常量,或者换句话说,函数名称是指向函数的指针常量(函数名称实质上是这个函数的代码和数据在内存中的首地址)
int (*p)(); // 这样定义指向函数的指针
// 应说明如下问题:
// 1、这里的()绝对不能少;
// 2、前面的int类型应该和这个指针未来要指向的函数的返回值类型保证一致。
p = add;
result = p(3, 4); // 也可以写成:result = (*p)(3, 4);
int (*f) () :这里 "f" 是一个函数指针 ,它存储着一个没有参数,返回值为int类型的函数的地址。
结构体.和->的理解
"."一般情况下读作"的”。
“->”一般读作"指向的那个结构体的"。
结构体用.
结构体指针用->,他毕竟只是一个指针,而非结构体。
结构体中有成员,而结构体指针中只有一个结构体的地址。
scanf为什么变量前要取地址呢?
因为想通过一个函数改变一个变量的值的时候,必须把这个变量的地址传过去!
数组长度直接array.length