C语言学习笔记(三)
·
目录
C语言
注:一下所写均为新了解的知识并非整体的知识总结
一、#define
1.定义标识符常量
例:
#define NUM 100
int main()
{
int arr[NUM] = { 0 };//此处的NUM是一个值不是变量,可以在数组定义时使用
int n = NUM;
printf("%d\n", n);
return 0;
}
输出结果:
100
2.定义宏
宏是有参数的
例:
#define ADD(x,y) ((x)+(y))
int main()
{
int a = 10;
int b = 20;
int c = ADD(a, b);
printf("%d\n", c);
return 0;
}
输出结果:
30
二、指针变量
指针变量的用法
定义一个变量
int a = 10;
利用&符号即可取出该变量的地址
&a ;
定义一个指针变量p用来存放变量a的地址数据
int* p = &a;
此定义中p是指针变量,用于存放地址数据,*是说明p是指针变量,int说明指向的对象是int类型的。
特别注意:
int* p1, p2, p3;
此时三个变量中只有p1被定义为指针变量,p2、p3只是普通的int类型 。
int *p1, *p2, *p3
此时的三个变量才会都被定义为指针变量。
解引用操作符
利用*符号可以解引用操作,意思是通过p存放的地址,找到p指向的对象,*p就是p指向的对象, *p = 20;即将20赋值给p指向的对象变量a。
*p = 20;
int main()
{
int a = 10;//申请四个字节存放数据10
&a;//取地址操作符
printf("%p\n", &a);
int* p = &a;
*p = 20;//解引用操作符,意思是通过p中存放的地址,找到p所指向的对象,*p就是p指向的对象
printf("%p\n", p);
printf("%d\n", a);
return 0;
}
每次输出的地址可能都不相同,原因是每次运行代码时,编译器会自动给变量分配地址,每次分配的地址都是随机的。
指针变量的大小
可以利用sizeof函数读出指针变量的大小
printf("%zu ", sizeof(char*));
printf("%zu ", sizeof(short*));
printf("%zu ", sizeof(long*));
printf("%zu ", sizeof(int*));
printf("%zu ", sizeof(float *));
printf("%zu ", sizeof(double*));
输出结果
①若为32位机器则输出
4 4 4 4 4 4
②若为64位机器则输出
8 8 8 8 8 8
说明:
- 指针变量的大小取决于一个地址存放需要多大的空间,32位机器的地址有32bit,即4字节,对应输出4。64位机器的地址有64bit,即8字节,对应输出8。
三、结构体
- 结构体是将单一的类型组合在一起的用法
定义一个结构体
struct Stu //Stu是结构体对象名
{
//结构体成员
char name[20];
int age;
char sex[10];
char tele[12];};
Stu为结构体对象名,可以自定义
变量name、age、sex、tele为结构体成员
使用结构体
直接使用结构体
struct Stu //Stu是结构体对象名
{
//结构体成员
char name[20];
int age;
char sex[10];
char tele[12];
};
int main()
{
struct Stu s = { "张三",20,"男","155****8862" };//定义一个结构体变量s,并赋值
//结构体使用:结构体对象.成员名
printf("%s %d %s %s\n",s.name,s.age,s.sex,s.tele);
//结构体成员输出顺序可调整,但需确保数据类型与输出符号严格匹配。
return 0;
}
与指针变量相结合使用
法一:
使用解引用符号用(*ps)代替结构体变量s
struct Stu //Stu是结构体对象名
{
//结构体成员
char name[20];
int age;
char sex[10];
char tele[12];
};
int main()
{
struct Stu s = { "张三",20,"男","155****8862" };//定义一个结构体变量s,并赋值
struct Stu* ps = &s;
printf("%s %d %s %s\n", (*ps).name, (*ps).age, (*ps).sex, (*ps).tele);
//*ps就是ps指向的对象,即结构体变量s。
return 0;
}
法二:
直接利用指针变量的属性,指针变量指向成员名调用结构体
struct Stu //Stu是结构体对象名
{
//结构体成员
char name[20];
int age;
char sex[10];
char tele[12];
};
int main()
{
struct Stu s = { "张三",20,"男","155****8862" };//定义一个结构体变量s,并赋值
struct Stu* ps = &s;
printf("%s %d %s %s\n", ps->name, ps->age, ps->sex, ps->tele);
//结构体指针变量->成员名
return 0;
}
更多推荐


所有评论(0)