基本的变量与数据类型
- c语言数据类型
- 整型:int %d
- 浮点型:float %f
- 双精度:double 谨记,输入用%lf 输出用%f
- 字符型:char %c
- 布尔型:bool
- void类型:表示空
- 指针类型
- 数组类型
- 结构体,共用体
- 函数类型
- 变量的类型与作用域
局部变量:在函数内部定义或在复合语句内部定义的变量。
全局变量:在函数外定义的变量。作用范围是从定义位置到文件末尾。
动态存储方式:程序运行期间根据需要动态分配存储空间
自动变量,寄存器变量,形参
静态存储方式:由系统分配固定的存储空间
外部变量
静态局部变量
- 算术运算符
/ :除法 两个整型相除结果为整型,有一个为浮点型时结果为小数
% :取余
- 逻辑运算符
&& 称为逻辑与运算符。
|| 称为逻辑或运算符。
! 称为逻辑非运算符。
- 常量的定义
#define LENGTH 10
常用语法
-
sizeof()函数
用于得到某个变量的大小 -
预处理指令(加载库函数)
#include<stdio.h>
#include<string.h>
- 基本输入输出语句
#printf语句
printf(格式控制字符串,输出表列)
printf("%d,%c",i,j)
printf("%m.nf,i) //表示输出数字占m列,保留n位有效数字
#scanf语句
scanf(格式控制字符串,地址表列)
scanf("%d %d",&a,&b) //变量要加地址符,字符串不用加
- 字符串输入
- scanf("%s",a);
scanf遇到空格 制表符 \n时,都会结束输入
\n会留在缓冲区
可以在scanf语句后面加一个getchar()吸收缓存区中的\n避免对后面输入产生影响
- gets(a);
从输入缓冲区中读取一个字符串(不是直接从控制台读取)
gets只有遇到\n时才会结束输入
\n不会留在缓冲区中
- 字符串输出
puts(str); //puts方法输出完字符串后会自动换行
printf("%s",str) //不会自动换行
- 字符输入
- a = getchar();
从缓存流读入一个字符,如果缓存没有再从控制台读入
- a = getch();
从控制台读入一个字符,不会从流中读取
常用于程序流程控制
//字符输出函数
putchar(a)
- 数组的定义
int a[3]= {1,2,3};
int a[2][3] = {{1,2,3},{4,5,6}};
char c[10] = "hello";//字符串的默认结束符是'\0'
- 单引号和双引号
c语言中单引号和双引号不能混用,单引号表示一个字符,双引号表示字符串
‘a’占用一个字节,而“a”占用两个字节,因为后面还有一个默认结束符‘\0’
- 函数的定义和调用
//定义
int max(int x,int y)
{
......
}
//声明
int max(int x,int y);
//调用
max(a,b);
- 函数参数
1.数组元素做为函数参数与变量的使用相同,传的是值
2.数组名做为函数参数,传的是数组首元素的地址
此时形参可以是数组名或指针
而且由于是址传递,在子函数执行过后原函数数组也会改变
3.指针做为函数参数,即将一个变量的地址传送到另一个函数中。调用函数会改变
原实参的值。
- 指针
int *p; //指针定义
指针:一个地址
指针变量:存放地址的变量
基类型:表示指针变量可以指向的变量的类型
& //取地址运算符
* //指针运算符
- 通过指针引用数组
a: a[0]的地址
a+i: a[i]的地址
*(a+i): a[i]的值
int (*p)[4]: 指向一维数组的指针
int *p[4]: 存放指针的数组
- 通过指针引用字符串
//用指针变量指向整个字符串便可以直接引用,字符数组名本质上就是一个指针变量
char *p = "hello";
printf("%s",p);
//把一个字符串传入函数,可以用字符数组名或字符指针变量
- 指针与函数
指向函数的指针:指针变量存放某个函数的起始地址。int * p(int,int)
指针类型的函数:函数的返回值是一个指针类型的变量。int *max(int x,int y)
- 动态内存分配
void *malloc(size) //从内存的动态存储区中分配一个长度为size的连续空间。
//返回空间起始地址,如果失败返回空指针
void free(void *p) //释放指针p所指向的内存空间
- 结构体
//定义结构体并命名新的类型名Node,此时Node与struct student等价
typedef struct student
{
int a;
int b;
}Node;
- math库函数
#include<math.h > //引入库文件
double pow(double x, double y) //返回 x 的 y 次幂。
double sqrt(double x) //返回 x 的平方根。
double fabs(double x) //返回 x 的绝对值。
- string库函数
#include<string.h>
char *strcat(char *dest, const char *src) //字符串连接
int strcmp(const char *str1, const char *str2) //字符串比较
char *strcpy(char *dest, const char *src) //字符串复制
size_t strlen(const char *str) //计算字符串 str 的长度