C语言学习-6

文章详细介绍了C语言中的指针概念,包括指针存储在内存中的方式、设置指针、指针的用法和用途,以及指针的大小。同时,文章还讲解了结构体的使用,如何初始化和操作结构体成员。指针和结构体是C语言中重要的概念,常用于复杂的数据结构和内存操作。
摘要由CSDN通过智能技术生成

C语言学习系列文章目录-指针和结构体专题


一、指针储存的样子

指针储存在内存中就像是这样一个个格子,并且每个格子都有编号,每个格子都有一定大小

计算机内存的编号方式

我们常见计算机32位和64位,这个32和64是指n根地址线,是物理的真实存在的物理线,可以通电的那种,传输1/0高低电平数据的;
此时我们就可以获得将电信号转换成数字信息的方式也就是1/0组成的二进制序列;
那么由0/1的组成的编号就能组成内存单元的地址了也就是232/64了,每个内存单元分配一个地址,从而就是232个内存单元;
再根据bit和byte和kb的关系就能算出来内存大小;
当然不可能一个比特就分配一个地址,否则就会很小很小;

以32位且每个比特位分配一个地址为例子

232共有这么多个地址,也就是有这么多个bit
在这里插入图片描述

换算成byte
在这里插入图片描述

换算成kb
在这里插入图片描述
换算到mb
在这里插入图片描述

显然内存是小且不够用的,所以不会用一个bit一个地址的方式了;

考虑到不够用,因而最后我们将一个字节当作一个内存单元、分配一个地址,因而一个地址是8bit,一个地址是1byte

二、指针的设置

int a = 10;
printf("%p",&a);//%p是专门打印地址的;
int * pa=&a;//pa是用来存放地址的,也就是所谓的指针变量
//*说明pa是指针变量
//int说明pa指向的执行对象是int类型
char arr;
char *parr=&arr;

特别的这里的指针是可以存放自身的地址;但是他是会有类型差异的譬如如下

int *pa=*pa;//会显示int*和int**存在变量类型差异

三、指针的用法和用处

int a = 10;
int * pa = &a;
*pa = 20;//*就是解引用的操作,*pa就是通过pa的地址从而找到a,再更改a的值

四、指针的大小

通过sizeof的函数我们就可以知道指针的大小是多少了;事实上结果都是大小为4byte(32位就是32bit-4byte、同样的64bit的则是8byte),指针的大小是相同的,这是因为指针本身只是指向地址的,因而无论指针指向的内容是什么,指针本身只是一个门牌号并不决定开门之后有多少个人;

五、结构体

struct就是结构体用的关键字,通过初始化结构体对象来实现自定义类型;譬如可以创建如下的类型(类似int、double等等的类型);

struct student
{
	char name[20];
	int age;
	double score;
}
int main()
{
	struct student a = {"zhangsan",20,80.5};//结构体创建和初始化
	a.age=21;//更改年龄为21岁
	printf("%s %d %lf",a.name,a.age,a.score);//a.name就是结构体变量的成员变量;
	struct student * pa = &a;//*pa是结构体的地址
	printf("%s %d %lf",(*pa).name,(*pa).age,(*pa).score);//*解引pa指向的对象;
	printf("%s %d %lf",pa->name,pa->age,pa->score);
	//pa->指向的对象;
	//箭头指针到这个结构体下面的成员变量名;
	//注意左边是指针右边是成员变量名
	return 0;
}

总结

这个章节着重复习了指针的使用,接下去就是结构体了,结构体比较简单一些,指针和结构体一般会套着用,好像出题也蛮多的;总体就是理解*的用法,然后就是了解指针的意义和内存的处理方式;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值