什么是c语言程序?
一.一个c语言程序大体框架由哪几部分组成
#include | 预处理器指令 |
int main() | C语言中的主体 |
function a() | 语句(函数构造块) |
function b() | 语句(函数构造快) |
语句种类 |
|
二.认识c语言
数据类型
- int 占用4个字节的内存 整形 —— %1d占用一个变量
- short 占用2个字节的内存 短整型
- char 占用1个字节的内存 字符数据类型 ——%c
- long 占用4个字节的内存 长整型
- long long 占用8个字节的内存 更长的整形
- float 占用4个字节的内存 单精度浮点数 ——%.1lf 保留一位小数
- double 占用8个字节的内存 双精度浮点数
变量和常量
局部变量和全局变量,局部变量优先
- 字面常量
- const 修饰的常变量
- #define 定义的标识符常量
- 枚举常量
转义字符
- \? 主要为了防止三字母词
- \'
- \"
- \\ 反斜杠
- \a 警告蜂鸣
- \b 退格符
- \f 进纸符
- \n 换行
- \r 回车
- \t 水平制表符
- \v 垂直
- \ddd 八进制数字
- \xdd 2个十六进制数字
注释
语句(循环语句和选择语句等六种语句)
函数——(大都由圆括号组成,花括号代表函数的开始和结束)
例如:主函数 int main()等等,不仅如此,函数也可以创建和被调用,常用来调用代码较多的函数 体。
数组
char arr2[这里为有几个元素]={这里为存放的元素}注意存放的元素可以为任何类型但是都是相同类型,并且下标是从0开始
例如:
#include <stdio.h> int main() { int arr[5]={1,2,3,4,5}; printf("%d",arr[4]); return 0; }
这样我们就打印出了一个5
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int main() { char* arr[] = { "a","b","c" }; printf("%s", arr[0]); return 0; }
这样就打印了一个a
char arr2[]={"a","b","c"}没有0所以他会一直检索 随机找到/0,所以他的字符长度是随机的
char arr1[]="abc" 这个是默认有/0
操作符
算术操作符 + - * / %
移位操作符
>> << (按照二进制移位)
位操作符
& ^ |
赋值操作符
= +=(相当于i=i+1) -= *= /= &= |= >>= <<=
单目操作符
!逻辑反 常见!=为不等于
- 负值
+ 正值
&取地址
sizeof 计算操作数的类型长度(以字节为单位)
++ 前置 b=++a(相等于a=a+1),先a自身++,再使用. 后置++ ,b=a++,先使用(也就是赋值 给b),再a自身++(赋值后a自增)
-- 同理
* 间接访问操作符(解引用操作符)
(强制类型转换)
int a=(int)3.14
关系操作符
>
>=
<
<=
!=
==
逻辑操作符(0代表假,1代表真)
&& 逻辑与(相当于并且)——两者都为真才为真,否则为假
|| 逻辑或(两者有一者为真则为真)
条件操作符
exp ?exp2:exp3(m=(a>b?a:b)) 如果为真表达式2计算为假则表达式3计算
exp为表达式
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int main() { int a = 0, b = 0; scanf("%d %d", &a, & b); if(a>b? printf("%d", a) : printf("%d", b)) return 0; }
逗号表达式
例子d=(a=b-3,b=a+c,c=a-b,a=c+3)从左向右依次计算,但是最后结果以最后表达式为主
下标引用操作符
[] () . ->
arr[10]={1,2,2,4};
printf("%d",arr[3]);这里的3为下标
常见关键字
auto break case char const continue default do double else enum
extern float for goto if int long register return short signed
sizeof static struct switch typedef union unsigned void volatile while
注意关键字static——可修饰局部变量,全局变量,函数
static与const不同的是
static 修饰局部变量时候改变了变量的存储类型,而const只是给变量拥有常量的属性,但本质 上还是给变量,这两者不能搞混
static 修饰局部变量时候改变了变量的存储类型
普通的局部变量是存储在栈区
被static修饰的变量是存储在静态区的
存储在静态区的变量,出了作用域不会销毁,依然存在,所以静态变量的生命周期就是程序的 生 命周期,程序结束的时候,静态变量才会回收空间
#define 定义常量和宏
1.define 定义标识符常量
#define MAX 1000
2.define定义宏
#define ADD(x, y) ((x)+(y)) 最后一个圆括号为内容 中间是圆括号的宏的名字
注意宏和函数的区别
函数的参数有具体的类型,而宏没有,宏的内容主要在最后一个括号内
指针
指针变量 —— 简单描述为 类型* 变量 = &变量
#include <stdio.h> int main() { int a = 0; int* aa = &a; printf("%d", *aa = 1); return 0; }
由上看出是输出1,int* aa = &a 是解引用符号指向int从而找到a的地址,
而*aa是找到a这个变量相当于 a=1,也就是把1赋值给*aa(a),从而输出a
注意数据在内存中是倒着放的 (涉及到原码,反码,补码)
原码就是二进制位,反码就是原码取反,补码就是反码加1
其中的缘由到指针时再去细学
指针变量是4字节(32位)和8字节(64位)——(基本不会改变)
指针变量与函数
void test(double* pd)
{
*pd=5.6;
}
test(&d) 把这个&d传给*pd(指针变量)
结构体
struct 名称 变量
struct stu{}是类型相当于int