当前位置: 首页 > article >正文

C++研发笔记11——C语言程序设计初阶学习笔记9

        本篇笔记我们继续第二部分《初识C语言》的学习,上一篇学习笔记当中我们详细学习了常见关键字以及#define 定义常量和宏的相关知识,接下来第二部分的内容的内容还包括:指针以及结构体。

第二部分  初识C语言

十三、指针

// 学习指针之前,必须要理解好内存。
// 内存是计算机上的一种储存空间。(8G / 16G)
// 程序运行的时候会载入内存,程序中如果有数据需要储存,也会申请内存空间
// 内存是电脑上特别重要的存储器,计算机中所有程序的运行都是在内存中进行的 。
// 所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。
// 为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址(指针)。

// 如果访问一个内存单元,那内存单元的地址(指针)如何产生呢?
// 以32位机器为例子:32根地址线,地址线如果通电(通电不通电分别代表0和1),这样32位机器可以产生2^32个二进制序列
// 也就是作为2^32个地址,就可以管理2^32个内存单元,也就是2^32个字节的内存空间。(即4GB)

// 因此每个变量都有地址,我们可以通过代码取出地址。

#include<stdio.h>

int main()
{
	int num = 10; // 向内存申请了4个字节
	&num; // 取出整型变量 num 的地址,& 是取地址操作符
	printf("变量num所占空间大小为:%zd\n", sizeof(num));
	printf("变量num的地址为:%p\n", &num); // 打印 num 地址 ,%p —— 以地址的形式打印
	// 打印结果为16进制表示,打印的是变量所占内存对应的第一个字节的地址(较小的地址)
	// 我们可以将地址储存起来,这样就要定义指针变量
	int* p = &num; // 定义了一个整型指针变量
	// int 代表指向的是 int 类型的变量,* 表示 p 是一个指针
	printf("变量num的地址为:%p\n", p);
	*p = 20; // 解引用操作,作用就是通过 p 中的地址,找到 num ,*p 就是 num
	printf("num = %d\n", num);
	// 上面是以整型指针变量为例子,下面我们也可以推广到其他类型
	char ch = 'a';
	char* pc = &ch;
	*pc = 'b';
	printf("ch = %c\n", ch);
	// 本质上指针就是地址,但是平常我们说的指针往往指的是指针变量
	// 我们也可以通过 sizeof 计算指针变量的大小
	printf("%zd\n", sizeof(int*));
	printf("%zd\n", sizeof(short*));
	printf("%zd\n", sizeof(long*));
	printf("%zd\n", sizeof(double*));
	printf("%zd\n", sizeof(float*));
	printf("%zd\n", sizeof(char*));
	// 32位的机器上,指针变量存放的是32bit的地址,因此32位机器上指针变量是4个字节
	// 64位的机器上,指针变量存放的是64bit的地址,因此64位机器上指针变量是8个字节
	return 0;
}

十四、结构体

/*
C语言的内置类型:char short long int float double ……
C语言除此之外还具有自定义类型:数组、结构体、枚举、联合体
结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。
比如在描述一些复杂对象的时候:
	描述人 —— 姓名 性别 身高 体重 年龄 ……
	描述书 —— 书名 作者 出版社 定价 ……
描述这些复杂对象就只能用结构体(struct)描述了
*/

// 比如描述学生:姓名 + 性别 +年龄

#include<stdio.h>

struct Student
{
	char name[20];
	char sex[5];
	int age;
};

void Print(struct Student * a)
{
	printf("name = %s\n", (*a).name);
	printf("sex = %s\n", (*a).sex);
	printf("age = %d\n", (*a).age);
	// 还有另外一种表示方法
	printf("%s %s %d\n", a->name, a->sex, a->age);
	// -> 这个操作符是一种语法规定,也可以达到同样的效果
	// 结构体的指针 -> 成员名
}


int main()
{
	// 对结构体进行初始化
	struct Student s = { "刘博实","男",18 };
	// 打印结构体信息, . 为结构体成员访问操作符
	printf("name = %s\n", s.name);
	printf("sex = %s\n", s.sex);
	printf("age = %d\n", s.age);
	struct Student s1 = { "张三","女",20 };
	Print(&s1);
	return 0;
}

        截止到这里,我们完成了第二部分《初识C语言》全部的学习内容,在这一部分我们对C语言需要掌握的全部知识都会有了一个初步的认知和了解。接下来的一篇笔记会更新习题内容,来回顾这一部分的知识。进而就开始第三部分《分支语句和循环语句》的学习了。


http://www.kler.cn/a/376901.html

相关文章:

  • ubuntu22.04 的录屏软件有哪些?
  • Ubuntu上安装Apache Spark
  • 关于Mac使用VSCode连接虚拟机
  • C 语言奇幻之旅 - 第16篇:C 语言项目实战
  • reducer同步,dispatch异步
  • 基于FPGA的出租车里程时间计费器
  • 力扣11.2
  • Python-GUI-概览
  • Zypher Network:全栈式 Web3 游戏引擎,服务器抽象叙事的引领者
  • libaom 源码分析:AV1帧内预测 CfL 模式
  • cdn加速原理
  • Selective Generation for Language Models 语言模型的选择性生成
  • Uniswap/v2-core使用及其交易流程
  • 【游戏引擎之路】登神长阶(十)——游戏动画制作:我想成为那一道光!
  • ubuntu【桌面】 配置NAT模式固定IP
  • npm入门教程16:npm自动化CI/CD
  • 【系统架构设计师】预测试卷一:案例分析
  • 【Python基础】
  • vscode不能执行vue命令/ vue : 无法加载文件
  • 基于生成式人工智能的工业互联网安全技术与应用研究
  • 矩阵的奇异值分解SVD
  • Nginx安装配置详解
  • next项目app router 中layout命名规范
  • 微信小程序海报
  • 清晰易懂的JavaScript进阶部分——DOM操作 (节点获取,节点属性修改,节点创建与插入,CSS样式的修改)
  • 前端笔试新问题总结