一切合法的变量名的定义(普通变量、指针变量、数组变量、函数指针、结构体)都可以用typedef转换成类型名
加typedef之前
unsigned int UINT; //普通变量 int* PINT; //指针变量 int Array[10]; //数组变量 void (*pfun)(); //函数指针 struct Student stu; //定义结构体变量stu struct Student *pstu;//定义结构体指针pstu
加上typedef之后
typedef unsigned int UINT; //UINT类型名 typedef int* PINT; //PINT指针类型名 typedef int Array[10]; //Array数组类型名 typedef void (*pfun)(); //函数指针类型名 typedef struct Student stu; //stu类型 //使用stu s1; typedef struct Student *pstu; //结构体指针类型 //使用:pstu p1 = NULL;
(1)给已有的类型名起别名
typedef unsigned char u_int8; typedef unsigned short u_int16; typedef unsigned int u_int32; typedef unsigned double u_int64;
(2)对已有的声明,变量名的定义加上typedef 变成类型名
#includetypedef int Arr[10]; int main() { Arr a = { 1, 2, 3, 4, 5 }; for (int i = 0; i < 5; i++) { printf("%4d ", a[i]); } printf("n"); }
结果:
结构体经典写法:
#include2.请问p和q的类型struct Student { ...; }stu, *pstu; //这样是定义了stu结构体变量和pstu结构体变量指针 //前面加上typedef后 typedef struct Student { ...; }stu, *pstu; //stu便成了自定义的结构体类型 //pstu变成了自定义的结构体指针的类型 //从而可以使用该类型进行定义变量
int* p, q;
结果:
*和变量名结合,不是与类型名结合,所以p是int指针类型,q是int类型;
结合1,想同时定义p和q两个指针:
#includetypedef int *PTR; int main() { PTR p,q; return 0; }
结果:
3.关键字sizeof- sizeof是一个关键字,在编译期间确定类型和大小;
#includeint main() { int a = 0; int x; //在编译期确定 x = sizeof(++a); //等价于x = 4; printf("a = %dn", a); return 0; } //结果a = 0
- sizeof和strlen()的区别
-
调用时机不同:sizeof是关键字,编译期间确定类型和大小
strlen()是函数,在运行期间调用函数
-
功能不同:strlen()是专门计算字符串的长度;
sizeof在计算字符串所占用的空间大小;
char buff[] = {"helloworld"};
int len = strlen(buff); //len = 10;
int size = sizeof(buff); // size = 11;
4、进制数转换的贪心算法
博客
5、c/c++的常变量不同侧重点vs2019的全局变量未初始化默认为0,局部变量未初始化是随机值,使用该值编译不通过
-
c中的常变量侧重与"变量",不能使用常变量定义数组,编译期不通过;
-
c++中的常变量侧重于"常",可以使用该常变量定义数组;
-
C++常变量类似于宏,却有不同与宏
- 编译时期不同
- 与宏有所不同:宏在预编译时进行宏替换;使用常变量定义数组是在编译期进行确定的;
- 是否存在类型和占用空间
- 宏不存在类型,不占用空间
- 常变量有类型,占用空间
- 安全性
- 宏不存在类型,没有类型检查,不安全
- 常变量有数据类型,有类型检查,比较安全
- 编译时期不同
’ ‘是字符的定界符, 在’前面加上后转义变成单引号字符–》’
例如:
char ch = '''; //error ''是定界符,想使用单引号字符需要转义 char ch = '''; //true
""是字符串的定界符
7、ascii码值 8、转义字符 9、关于0 ‘0’ ‘ ’int main()
{
char cha = 0; //ASCII值为0对应的字符就是空字符
char chb = '0'; //字符0对应的ASCII值48
char chc = ' '; //等于cha == 》空字符
char chd = ' '; //空格字符ascii值是32
return 0;
}
10、关于 00 和xff


