自学内容网 自学内容网

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语言需要掌握的全部知识都会有了一个初步的认知和了解。接下来的一篇笔记会更新习题内容,来回顾这一部分的知识。进而就开始第三部分《分支语句和循环语句》的学习了。


原文地址:https://blog.csdn.net/Lbs_gemini0603/article/details/143422310

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!