当前位置:网站首页>【C语言入门系列(8)(9)】第八、九章、指针、结构体
【C语言入门系列(8)(9)】第八、九章、指针、结构体
2022-04-21 07:23:00 【二木_O】
本文将介绍指针、结构体的基础内容
文章目录
一、指针
指针是C语言中一种特殊的变量类型,与其他类型的变量不同,指针变量存储的不是变量,而是变量的地址。
那么什么是地址?这就不得不提到内存
- 内存
内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。
所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。
为了能够有效的访问到内存的每个单元,就给内存单元进行了编号(十六进制),这些编号被称为该内存单元的地址。

1. 指针的概念
如果在程序中定义一个int型的变量a:
int a = 10;
那么编译器会根据变量a的类型int,分配4个字节地址连续的存储空间。如果这块连续空间的首地址为0x010FF7A0,那么这个变量占0x010FF7A0~0x010FF7A4这四个字节的空间,0x010FF7A0 就是这个变量的地址。我们可以通过变量的地址找到该变量,而该地址就是指向该变量的指针。
如果将内存空间视为酒店,那么内存单元好比酒店中的房间,地址好比酒店中房间的编号,而内存空间中存储的数据就相当于房间中的客人。

2. 指针变量的定义和初始化
- 定义
定义指针变量的语法格式如下:
格式:变量类型*变量名
先定义再初始化
int num = 10;
int *p;//p为一个整形指针变量
p = #
也可以在定义的同时为指针变量初始化
int num = 10;
int *p = #
3. 指针变量的类型
由整形指针,可以推广到其他类型:
#include <stdio.h>
int main()
{
char ch = 'e';
char* pc = &ch;
*pc = 'm';
printf("%c\n", ch);
return 0;
}
4. 指针变量的大小
指针变量的大小取决于地址的大小
32位平台下地址是32个bit位(即4个字节)
64位平台下地址是64个bit位(即8个字节)
#include <stdio.h>
int main()
{
printf("%d\n", sizeof(char *));
printf("%d\n", sizeof(short *));
printf("%d\n", sizeof(int *));
printf("%d\n", sizeof(double *));
return 0;
}
所以上面代码的输出结果都是4或8。
二、结构体
①. 结构体类型定义
结构体是一种构造数据类型,可以把不同类型的数据整合在一起,每一个数据都称为该结构体类型的成员。
struct 结构体类型名称
{
数据类型成员名1;
数据类型成员名2;
……
数据类型成员名n;
};
struct Student
{
int num;
char name[10];
char sex;
int age;
};
结构体类型中的成员,也可以是一个结构体变量
struct Date
{
int year;
int month;
int day;
};
struct Student
{
int num;
char name[10];
char sex;
int age;
struct Date birthday;
};
②. 结构体变量的定义
- 先定义结构体类型,再定义结构体变量
struct Student stu1, stu2;
- 在定义结构体类型的同时,定义结构体变量
struct Student
{
int num
char name[10];
char sex;
int age;
} stu1, stu2;
③. 结构体变量初始化
- 在定义结构体类型和结构体变量的同时,对结构体变量初始化
struct Student
{
int num;
char name[10]
char sex;
}stu={
20220101,"Zhang San",'M'};
- 定义好结构体类型后,对结构体变量初始化
struct Student
{
int num;
char name[10];
char sex;
};
struct Student stu ={
20220101,"Zhang San",'M'};
④. 结构体成员访问
- 使用成员访问运算符
.来访问变量 s中各成员;
#include <stdio.h>
typedef struct Student//定义一个结构体
{
int num;
char name[20];
int age;
float height;
}STU; //用typedef给结构体起别名为STU
int main()
{
STU stu = {
0 };//定义一个结构体变量并初始化
scanf("%d%s%d%f", &stu.num, &stu.name, &stu.age, &stu.height);
printf("%d %s %d %.2f \n", stu.num, stu.name, stu.age, stu.height);
return 0;
}

- 通过结构体指针访问
#include <stdio.h>
typedef struct Student//定义一个结构体
{
int num;
char name[20];
int age;
float height;
}STU; //用typedef给结构体起别名为STU
int main()
{
STU stu = {
0 };//定义一个结构体变量
STU* ps = &stu;//定义一个结构体指针
scanf("%d%s%d%f", &ps->num, &ps->name, &ps->age, &ps->height);
printf("%d %s %d %.2f\n", ps->num, ps->name, ps->age, ps->height);
return 0;
}
总结
《C语言入门》到此就结束了,谢谢小伙伴们的支持。期待我们下一次相遇,下一次学习。
版权声明
本文为[二木_O]所创,转载请带上原文链接,感谢
https://blog.csdn.net/m0_68609336/article/details/124256538
边栏推荐
- go-数组 切片
- Codeforces Round #783 (Div. 2) ABC
- 2022年R2移动式压力容器充装考试题模拟考试题库及模拟考试
- [Ethernet switching security] - explanation of port isolation operation principle and two-layer isolation and three-layer communication example configuration
- 跨域是什么和如何解决跨域问题的三种方法
- Vim插件管理插件Vim-plug
- [PROJECT] small hat takeout (V)
- Web 开发相关库或者软件
- Yolov5.0 calling local camera
- J'ai accidentellement trouvé la base de données d'une soeur Tsinghua!
猜你喜欢
随机推荐
antv x6一些简单效果的实现总结
The interface is not restored after Fiddler changes the font
go-数组 切片
[Ethernet switching security] - port security and MAC address drift prevention and detection
Loading and unified exception handling
Web development related libraries or software
libevent实现客户端
loading加载和统一异常处理
VMware16 新安装Win11专业版 ,无法读取ISO镜像无法启动安装程序
CouchDB vertical ultra vires
webrtc+srs(sfu)
剑指offer day22 位运算(中等)
【一、xxx病虫害检测项目】2、网络结构尝试改进:Resnet50、SE、CBAM、Feature Fusion
Post sqlmap injection method
set集合
作文以记之 ~ 克隆图
2022年危险化学品生产单位安全生产管理人员考试模拟100题模拟考试平台操作
Refer to ladder for router equipment selection
It can be downloaded to the data set running loam
ESP32 VHCI实现BLE广播,就是这么神奇









