【C语言】回炉重造的C之指针+结构体

简介: 【C语言】回炉重造的C之指针+结构体

一、指针到底是个什么牛马?

1.说指针之前先来了解下——内存image.png

由于我们的电脑有32位/64位两种,拿32位来举例子

32位——32根地址线(也就是电线,给他们通电,产生0/1)

于是乎就会产生image.png


这种32个一串的地址一共有2^32 个也就是2^32 个bit,而1个字节=8bit,所以就会有(2^32)/8个内存单元

2.内存用来干什么

当然是用来存东西,举个栗子

image.png


然后呢,假设这4个字节的内存空间编号为501 502 503 504image.png


问题来了,那a到底是哪个格子呢?让代码运行起来用监视器查看一下image.pngimage.png


监视器一查看就会发现&a取到的其实是第一个字节的地址,同时还发现,取地址是从低地址往高地址取的(从第一位往后,因为只要找到了第一位,后面的就依次+1即可),也就是如图image.png


3.指针

接着上边,将a的地址给它打印出来,这里注意一个问题,因为每次的内存都是重新分配的,所以每一次打印出来的地址是不一样的


image.png


指针的定义image.pngimage.png


为什么要这样定义image.png


举个栗子image.png


地址和变量的关系请看图image.png


存放10的地址就是指针,地址就好比你家门牌号 即————地址=指针image.png


二、指针怎么使用

* ——解引用操作符

要想使用指针,就要用到解引用操作符,也就是 “ * ”号image.png


三、指针的大小

打印出各种类型的指针的长度image.png


运行结果为

image.png


为什么全都是4,那是因为在32位的机器上,一个内存单元的大小为1byte=8bit,而4个字节(byte)=32个bit,上栗子``image.png


四、结构体

一个复杂对象,栗如:

学生:

名子+年龄+性别+身高

—————————————————————————————————————

当遇到这种对象时,基本类型已经无法表示,这时候就需要用到结构体image.png


语法格式就是这个样子,依葫芦画瓢,用就完了

结构体变量如果要访问成员变量,就要用 “.”操作符

printf("名字:%s 年龄:%d 性别:%s 学号:%s", s1.name, s1.age, s1.sex, s1.id);//即可访问并打印各个成员变量

同样,可以用指针来访问变量成员两种方法都是可以的,都一样image.png

“.”————————结构体变量.成员名

“->”————————结构指针->成员名

总结

本篇只对指针和结构体做简单介绍,方便理解为主,欢迎指出错误

//创作不易,如果觉得可以,三连走起来~看到会回访//

相关文章
|
1月前
|
存储 NoSQL 编译器
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
指针是一个变量,它存储另一个变量的内存地址。换句话说,指针“指向”存储在内存中的某个数据。
103 3
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
|
1月前
|
存储 网络协议 编译器
【C语言】深入解析C语言结构体:定义、声明与高级应用实践
通过根据需求合理选择结构体定义和声明的放置位置,并灵活结合动态内存分配、内存优化和数据结构设计,可以显著提高代码的可维护性和运行效率。在实际开发中,建议遵循以下原则: - **模块化设计**:尽可能封装实现细节,减少模块间的耦合。 - **内存管理**:明确动态分配与释放的责任,防止资源泄漏。 - **优化顺序**:合理排列结构体成员以减少内存占用。
166 14
|
1月前
|
存储 编译器 C语言
【C语言】结构体详解 -《探索C语言的 “小宇宙” 》
结构体通过`struct`关键字定义。定义结构体时,需要指定结构体的名称以及结构体内部的成员变量。
196 10
|
1月前
|
存储 编译器 C语言
【C语言】指针大小知多少 ?一场探寻C语言深处的冒险 !
在C语言中,指针的大小(即指针变量占用的内存大小)是由计算机的体系结构(例如32位还是64位)和编译器决定的。
85 9
|
1月前
|
安全 程序员 C语言
【C语言】指针的爱恨纠葛:常量指针vs指向常量的指针
在C语言中,“常量指针”和“指向常量的指针”是两个重要的指针概念。它们在控制指针的行为和数据的可修改性方面发挥着关键作用。理解这两个概念有助于编写更安全、有效的代码。本文将深入探讨这两个概念,包括定义、语法、实际应用、复杂示例、最佳实践以及常见问题。
52 7
|
2月前
|
存储 数据建模 程序员
C 语言结构体 —— 数据封装的利器
C语言结构体是一种用户自定义的数据类型,用于将不同类型的数据组合在一起,形成一个整体。它支持数据封装,便于管理和传递复杂数据,是程序设计中的重要工具。
|
2月前
|
存储 C语言
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
215 13
|
2月前
|
存储 编译器 数据处理
C 语言结构体与位域:高效数据组织与内存优化
C语言中的结构体与位域是实现高效数据组织和内存优化的重要工具。结构体允许将不同类型的数据组合成一个整体,而位域则进一步允许对结构体成员的位进行精细控制,以节省内存空间。两者结合使用,可在嵌入式系统等资源受限环境中发挥巨大作用。
86 11
|
2月前
|
存储 C语言 开发者
C 语言指针与内存管理
C语言中的指针与内存管理是编程的核心概念。指针用于存储变量的内存地址,实现数据的间接访问和操作;内存管理涉及动态分配(如malloc、free函数)和释放内存,确保程序高效运行并避免内存泄漏。掌握这两者对于编写高质量的C语言程序至关重要。
76 11
|
2月前
|
存储 程序员 编译器
C 语言数组与指针的深度剖析与应用
在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。