IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 【C语言】_day7+8+9- 初识指针 & 初识结构体 -> 正文阅读

[C++知识库]【C语言】_day7+8+9- 初识指针 & 初识结构体

第25节 初识指针【重点】-非常重要

1、内存

【引入】提问:
(1)内存怎么编号?

电脑—32位 / 64位电脑;

32位 —32根地址线—地址线是物理存在的线,可通电—产生电信号1/0;

电信号转换为数字信息:1和0组成的二进制序列;

一共有 2^32 个二进制序列,即 2的32次方个内存单元;

(2)这样一个内存单位是多大空间?

一个char = 1 byte=8 bit,但是比特作为地址太小了,用字节刚好

【打比方】:

1字节相当于一间寝室,1间寝室有8张床(1字节=8比特),我们不会用床(bit)作为地址,而是会用寝室号(byte)作为地址;

2、指针 --就是地址

(1)举例,sizeof _s int a= 4 ,即4个字节,在内存是哪四个字节空间呢?
f10 运行,调试- 窗口- 内存- 内存1 - &a
【补】** %p —打印地址**
可以发现,取地址并不会一次性把四个地址取完,只会取到从前往后的第一个字节地址

int  main()
{
	int a = 10;  // a在内存中要分配4个字节
    printf("%p\n",&a); //%p -打印地址
    int * pa = &a;   //pa是用来存放地址的,在c语言中称为 指针变量
	// * 说明pa是指针变量,int说明pa执行的对象是int类型的
	//如果是字符,对应如下
	char ch = 'w';
	char * pc = &ch;
	return  0;
}

(2)解引用操作符 * ,可以通过存储a的空间的地址来间接改变a的值

int main()
{
	int a = 10;     //有个整数a,值为10
	int* pa = &a;   //把a放进指针变量 pa里面,即 *pa取a的地址
	
	*pa = 20;    //*令pa变量里存储的值变为20,即令a的值为20
	printf("%d\n",a);    //结果= 20
	return 0;
}

3、指针有各种类型 & 各种类型指针变量的大小

下列程序运行结果都= 4,即 指针的大小是相同的;
【原因】
①因为指针是用来存放地址的,指针需要多大空间,取决于地址的存储需要多大空间;
②电脑分为,32位/64位机器
32位机器-32个比特位组成的二进制序列,32bit=4byte
64位机器-64bit=8byte
③此时用的vs2019的解决方案平台配置是debug-v86, 是32位平台,因此编出的程序中指针大小都是4byte
——如果改成 debug-x64,配置成为64平台,运行结果都= 8

int main()
{
	printf("%d\n", sizeof(char*));
	printf("%d\n", sizeof(int*));
	printf("%d\n", sizeof(short*));
	printf("%d\n", sizeof(long*));
	printf("%d\n", sizeof(long long*));
	printf("%d\n", sizeof(float*));
	printf("%d\n", sizeof(double*));

	//运行结果都= 4
	return 0;
}

//第26节 初识结构体-【重要】-衔接数据结构

1、创建不同类型的变量

—— C语言提供 结构体- struct 来描述复杂对象;
struct可以创建新的类型变量;
【举例】
①创建一本书的类型

struct book
{
	char name[20];  //名字是字符号,给他一个20个字符的空间大小?【可以这样理解吗?】
	float price;
	char id[30];
}

②创建一个学生的类型

struct stu 
{
	char name[20];  //名字是字符号,给他一个20个字符的空间大小?【可以这样理解吗?】
	int age;  // name age score 等称为结构体里面的**成员变量**
	double score;
}

2、使用创建的变量

以上诉创建的学生变量为例子,结构体创建和初始化后,下面提供三种找到成员变量的方法①②③:
方法①:使用 ** . 操作符**, s. 就可以找到成员变量
方法②:通过指针, 由*ps=&s ,可知指针ps找的是s的地址,则(ps). name找的是地址中变量存放的name (数据/元素)
方法③:通过操作符 ->箭头 , ps-> 相当于②指针中的(ps
).name,都是先找到指针的指向对象,再找到成员里的name

struct stu 
{
	char name[20]; 
	int age; 
	double score;
}

int main()
{
	struct stu s = {"张三",21,95.8};
	//学生变量stu有基本信息,就像上面创建学生类型一样,被大括号框起来了
   //此时已经给变量s赋值了,称为 **结构体的创建和初始化**
   
	//方法①
	printf("%s %d %lf\n",s.name,s.age,s.score);
	//  . 操作符,可以找到成员变量
	// s. 成员变量就可以找到它的成员变量
	
	//方法② 如果是通过指针来找变量
	 struct stu * ps=&s;
	 printf("%s %d %d\n", (*ps).name, (*ps).age, (*ps).score);
	// 由*ps=&s ,可知指针ps找的是s的地址,则(*ps).name找的是地址中变量存放的name  (数据/元素)
	 
	// 方法③  操作符 -> 箭头
	 printf("%s %d %lf\n", ps->name, ps->age, ps->score);
	//此时③的ps->相当于②的(ps*).name,都是先找到指针的指向对象,再找到成员里的name
	 
	 return 0;
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-09-21 00:08:17  更:2022-09-21 00:11:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 14:18:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码