初识C语言
main 主函数,程序入口,有且只有一个。
printf打印结果。
return 返回。
int整型的意思。
main函数前int表示main函数调用一个整型值。
void main已过时。
include 包含的意思
std -标准 standard input output
数据类型
char:字符数据类型
short:短整型
int:整型
long:长整型
long long:更长的整型
float:单精度浮点型
double:双精度浮点型
%c表示打印字符格式的数据
%d表示打印整型十进制数据
%f表示打印浮点型数据-打印小数-
%p以地址的形式打印
%x打印十六进制数据
字节:计算机中的单位
bit-比特位-:一个比特位可以存储一个1一个0
byte-字节-:一个字节可以存储8个比特位
kb:1kb=1024byte
mb:1mb=1024kb
gb:1gb=1024mb
tb:1tb=1024gb
pb:1pb=1024tb
char存储1个字节
short存储2个字节
int存储4个字节
long存储4个字节
long long存储8个字节
float存储4个字节
double存储8个字节
合理使用数据类型节省使用空间
变量
全局变量-定义在代码块({})之外的变量
局部变量-定义在代码块({})内部
局部变量与全局变量命名相同时优先使用局部变量,建议不要相同,相同时容易存在BUG
输入数据使用输入函数scanf
&取地址符号
C语言语法规定,变量要定义在当前代码块最前面
变量有作用域和生命周期
作用域(scope),程序设计概念,通常来说,一段代码所用到的名字并不总是有效的,限定这个名字的可用性的代码范围就是这个名字的作用域
生命周期,变量的生命周期是变量的创建到变量的销毁之间的一个时间段
常量
1、const:常属性
2、enum:枚举关键
3、可列举出来的常量称为枚举常量
4、字面常量
字符串:
'\0'字符串的结束标志
'\0'=0
strlen:string length-计算字符串长度
转义字符
转变原来的意思
/转变转义字符为原来的意思
C语言标准规定
sizeof(long)>=sizeof(int)
sizeof (arr)/sizeof (arr[0]) 计算数组大小 单位是字节
#include <stdio.h>
int main()
{
int arr[]={1,2,3,4,5,6,7,8,9};
int num=0;
num=sizeof(arr)/sizeof(arr[0]);
printf("arr数组大小为 %d",num);
return 0;
}
extern 声明外部符号
system 专门执行系统命令的函数库
strcmp 判断函数
~ 按位取反:
整型在内存中存储的时候,存储的是二进制的补码
原码取反得到反码,反码减一得到补码
printf打印的是二进制的原码
#include <stdio.h>
int main()
{
int a =0;//4个字节32个bit位,整型在内存中存储的时候,存储的是二进制的补码
int b=~a;//先取反再计算
//11111111111111111111111111111111补码
//11111111111111111111111111111110反码
//10000000000000000000000000000001原码
printf("%d",b);//打印二进制的原码
return 0;
}
后置++:a++//先赋值,再自加
前置++:++a//先自加,再赋值
(类型)强制类型转换
&& 逻辑与
|| 逻辑或
exp1?exp2:exp3 如果exp1为真则结果为exp2
如果exp1为假则结果为exp3
#include <stdio.h>
int main()
{
int a=10;
int b=2;
int max=0;
max=(a>b?a:b);
printf("max=%d",max);
return 0;
}
typedef 定义类型 类型重定义
static 修饰局部变量时,延长生命周期。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void test()
{
static int a = 1;
a++;
printf("a=%d\n", a);//不加static输出5个2
//加了static输出23456
}
int main()
{
int i = 0;
while (i < 5)
{
test();
i++;
}
return 0;
}
static 修饰全局变量时,改变变量的作用域。让静态的全局变量只能作用在自己所在的源文件内部使用,不可用exturn(声明外部符号)使用。
static 修饰函数时改变了函数的连接属性,外部连接属性变成了内部连接属性
#define MAX 100定义标识符常量(语法规定中间不加=号)
#define 可以定义宏
指针
#include <stdio.h>
int main()
{
int a = 10;
int* p = &a;//取地址,将a的地址存放到p
//有一种变量是用来存放地址的 指针变量
printf("%p\n", &a);//a的地址
printf("%p\n", p);//p的地址应当和a的地址相同
*p=20;//* 解引用操作符
printf("%d\n", a);//输出为20
return 0;
}
*解引用操作符/间接访问操作符,*放在指针变量p前,指向a,此时*p赋值就是给a的赋值。
int*代表指针变量的类型为整型,*单独放在变量前代表变量为指针变量。
struct 结构体关键字:
#include <stdio.h>
//创建一个结构体类型
struct book
{
char name[20];//书名字例如:安徒生童话,格林童话等等
short price;//书的价格,55
};
int main()
{ //利用结构体类型创建一个该类型的结构体变量
struct book b1 = { "安徒生童话",50 };
struct book* pb = &b1;//创建结构体类型的指针
printf("书名:%s\n", pb->name);//->操作符应用于指针,可以由指针找到结构体成员
printf("价格:%d元\n", pb->price);
printf("书名:%s\n", b1.name);//.操作符应用于结构体变量,可以找到结构体成员
printf("价格:%d元\n",b1.price);
b1.price = 20;//定义的结构体变量是可以修改的,比如书的价格由50变成了20
printf("价格:%d元",b1.price);
return 0;
}
->操作符应用于指针,可以由指针找到结构体成员
.操作符应用于结构体变量,可以找到结构体成员
strcpy string copy字符串拷贝,使用时需要用上string.h这个函数库
分支语句和循环语句
C语言中由一个;号隔开的就是一条语句。
if语句结构
#include <stdio.h>
int main()
{
int age = 10;
if (age < 18)
printf("未成年\n");
else
printf("成年\n");
return 0;
}
如果出现多个if和else,else与离的最近的未匹配的if进行匹配。
switch语句
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d",&day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
printf("休息日\n");
break;
case 7:
printf("休息日\n");
break;
default:
printf("输入错误\n");
}
return 0;
}
case表达式是常量表达式
default 默认项,当case语句条件都不满足时调到default项,可以出现在Switch语句内的任意地方,一个case语句只能出现一个default语句。