基础
数据以二进制形式存储在计算机中,1Byte=8Bit,字节是计算机中的最小可操作单位。
C中的变量/数据类型
基本数据类型
short、int、long、char、float、double
32位系统上各类型所占字节长度:2,4,4,1,4,8 Byte。
printf("%d\n",sizeof(int));
变量
有符号和无符号,最高位作为符号位。
int a;//变量声明,整型变量,分配内存区域。
a = 100;//变量赋值,将值存入内存。
输出格式控制
int a=100;
printf("%o %d %x\n",a,a,a);
printf("%#o %#d %#x\n",a,a,a);
字符与字符串
字符类型由单引号’ '包围,字符串由双引号" "包围。
char strr = 'a';
char str1[] = "http://c.biancheng.net";
转义字符\
\n 换行,\t占位,\\反斜杠
标识符
coder自己命名的,只能由字母(A-Z, a-z)、数字(0-9)和下划线(_)组成,并且第一个字符必须是字母或下划线,不能是数字。
关键字32个
注释,表达式,语句,运算
自动/强制类型转换
类型转换是临时性的,转换结果会保存到临时的内存空间,不会改变数据本来的类型或者值。
(float) a; //将变量 a 转换为 float 类型
(int)(x+y); //把表达式 x+y 的结果转换为 int 整型
(float) 100; //将数值 100(默认为int类型)转换为 float 类型
数组
数组内存是连续的,可以作为缓存使用。在C语言中,二维数组是按行排列的。
- 一维数组
- 二维数组:第一维长度值可以省略。
- 字符串数组,由" "包围的字符串会自动在末尾添加’\0’。
数组初始化
//memset使用
int a[10] = {0};
相当于:
#include<string.h>
int a[10];
memset(a,0,sizeof(a));
作用域
TIPS
获取数组长度
//获取数组长度 声明之后直接获取
int arr[10]={454,567,8,232,1,345,69,79,34,2243},len;
len = sizeof(arr)/sizeof(arr[0]);
指针
指针函数:带指针的函数。
函数指针:指向函数的指针变量。
*&a = a
f(int arr[], int n) == f(int *arr, int n)
函数传递数组的4种方式
- 形参和实参都用数组名
void main (){int a[10];f(a,10);}
void f(int x[], int n){}
- 实参是数组名,形参用指针变量。
void main(){int a[10];f(a,10);}
f(int *a, int n){}
- 实参形参都用指针变量
void main(){int a[10],*p=a;f(p,10);}
f(int *x, int n){}
- 实参为指针,形参为数组名。
void main(){int a[10],*p=a;f(p,10);}
f(int x[], int n){}
多维数组和指针
数组
二维数组取址和取值
函数作为参数
void sub(int (*x1)(int),int (*x2)(int,int)){
int a,b,i,j;
a = (*x1)(i);
b = (*x2)(i,j);
}
动态分配数组长度
有效用于函数返回
int *newarr = (int *)malloc(k); //动态分配指定数组长度
结构体
结构体变量
首先定义结构,再定义结构体变量。默认值同变量一样,int型的为0,指针型的为“NULL”。
//首先定义结构体
struct book {
int page;
char *name;
}
//定义结构体变量
struct book honglou;
结构体中的变量长度,由于字节对齐的原因,结构体中的部分变量长度会与原始长度有差别。
//字节对齐示例
#include<stdio.h>
#include<string.h>
#include<windows.h>
struct stu {
char tag[2]; //8 字节对齐
const char *name; //8
int age; //4
float score; //4
double total; //8
long double cost; //16
long int grade; //16 字节对齐
};
static struct stu opt = {};
int main(){
printf("%d\n",sizeof(opt));
system("pause");
return 0;
}
枚举
枚举是 C 语言中的一种基本数据类型。
定义
第一个枚举成员的默认值为整型的 0,后续枚举成员的值在前一个成员上加 1。不连续枚举无法遍历。
//枚举类型
enum DAY
{
MON=1, TUE, WED, THU, FRI, SAT, SUN
};
//枚举变量
enum DAY day;