好买网(www.goodmai.com )IT技术交易平台
1.typedef:类型重命名
一切合法的变量名的定义(普通变量、指针变量、数组变量、函数指针、结构体)都可以用typedef转换成类型名
加typedef之前
int* PINT; //指针变量
int Array[10]; //数组变量
void (*pfun)(); //函数指针
struct Student stu; //定义结构体变量stu
struct Student *pstu;//定义结构体指针pstu
加上typedef之后
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 short u_int16;
typedef unsigned int u_int32;
typedef unsigned double u_int64;
(2)对已有的声明,变量名的定义加上typedef 变成类型名
typedef 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");
}
结果:
结构体经典写法:
struct Student
{
...;
}stu, *pstu;
//这样是定义了stu结构体变量和pstu结构体变量指针
//前面加上typedef后
typedef struct Student
{
...;
}stu, *pstu;
//stu便成了自定义的结构体类型
//pstu变成了自定义的结构体指针的类型
//从而可以使用该类型进行定义变量
2.请问p和q的类型
结果:
*和变量名结合,不是与类型名结合,所以p是int指针类型,q是int类型;
3.关键字sizeof
- sizeof是一个关键字,在编译期间确定类型和大小;
int main()
{
int a = 0;
int x;
//在编译期确定
x = sizeof(++a);
//等价于x = 4;
printf("a = %d\n", a);
return 0;
}
//结果a = 0
- sizeof和strlen()的区别
-
调用时机不同:sizeof是关键字,编译期间确定类型和大小
strlen()是函数,在运行期间调用函数
-
功能不同:strlen()是专门计算字符串的长度;
sizeof在计算字符串所占用的空间大小;
int len = strlen(buff); //len = 10;
int size = sizeof(buff); // size = 11;
4、进制数转换的贪心算法 博客
5、c/c++的常变量不同侧重点 vs2019的全局变量未初始化默认为0,局部变量未初始化是随机值,使用该值编译不通过
c中的常变量侧重与"变量",不能使用常变量定义数组,编译期不通过;
c++中的常变量侧重于"常",可以使用该常变量定义数组;
C++常变量类似于宏,却有不同与宏
编译时期不同 与宏有所不同:宏在预编译时进行宏替换;使用常变量定义数组是在编译期进行确定的; 是否存在类型和占用空间 宏不存在类型,不占用空间 常变量有类型,占用空间 安全性 宏不存在类型,没有类型检查,不安全 常变量有数据类型,有类型检查,比较安全 6、’ ’ 和" " ’ ‘是字符的定界符, 在’前面加上\后转义变成单引号字符–》\’
例如:
char ch = '\''; //true
""是字符串的定界符
7、ascii码值
8、转义字符
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IgEV0wBA-1635073955443)(C:\Users\小小怪咯\AppData\Roaming\Typora\typora-user-images\image-20211023164550726.png)]
9、关于0 ‘0’ ‘\0’
{
char cha = 0; //ASCII值为0对应的字符就是空字符
char chb = '0'; //字符0对应的ASCII值48
char chc = '\0'; //等于cha == 》空字符
char chd = ' '; //空格字符ascii值是32
return 0;
}
10、关于\000 和\xff
\000将八进制数000转换成十进制对应的ascii码值,码值对应的字符;
- 其中八进制数有效范围000~377,因为char一字节最大取值255,其对应的八进制数就是377;八进制数超出该范围编译器就会报错
//八进制的141转换成十进制的97 //pzjahello
//如果是"pzj\1411hello" //pzja1hello
//如果是"pzj\148hello" //只会转义\14因为8超出0~7
//如果是"pzj\889hello" //此时的\就会被省略
int len = strlen(str); //len = 9