【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

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

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

总结

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

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

相关文章
|
27天前
|
C语言
【c语言】指针就该这么学(1)
本文详细介绍了C语言中的指针概念及其基本操作。首先通过生活中的例子解释了指针的概念,即内存地址。接着,文章逐步讲解了指针变量的定义、取地址操作符`&`、解引用操作符`*`、指针变量的大小以及不同类型的指针变量的意义。此外,还介绍了`const`修饰符在指针中的应用,指针的运算(包括指针加减整数、指针相减和指针的大小比较),以及野指针的概念和如何规避野指针。最后,通过具体的代码示例帮助读者更好地理解和掌握指针的使用方法。
45 0
|
25天前
|
存储 C语言
如何在 C 语言中实现结构体的深拷贝
在C语言中实现结构体的深拷贝,需要手动分配内存并逐个复制成员变量,确保新结构体与原结构体完全独立,避免浅拷贝导致的数据共享问题。具体方法包括使用 `malloc` 分配内存和 `memcpy` 或手动赋值。
31 10
|
24天前
|
存储 大数据 编译器
C语言:结构体对齐规则
C语言中,结构体对齐规则是指编译器为了提高数据访问效率,会根据成员变量的类型对结构体中的成员进行内存对齐。通常遵循编译器默认的对齐方式或使用特定的对齐指令来优化结构体布局,以减少内存浪费并提升性能。
|
26天前
|
C语言
【c语言】指针就该这么学(3)
本文介绍了C语言中的函数指针、typedef关键字及函数指针数组的概念与应用。首先讲解了函数指针的创建与使用,接着通过typedef简化复杂类型定义,最后探讨了函数指针数组及其在转移表中的应用,通过实例展示了如何利用这些特性实现更简洁高效的代码。
15 2
|
26天前
|
C语言
如何避免 C 语言中的野指针问题?
在C语言中,野指针是指向未知内存地址的指针,可能引发程序崩溃或数据损坏。避免野指针的方法包括:初始化指针为NULL、使用完毕后将指针置为NULL、检查指针是否为空以及合理管理动态分配的内存。
|
26天前
|
C语言
C语言:哪些情况下会出现野指针
C语言中,野指针是指指向未知地址的指针,通常由以下情况产生:1) 指针被声明但未初始化;2) 指针指向的内存已被释放或重新分配;3) 指针指向局部变量,而该变量已超出作用域。使用野指针可能导致程序崩溃或不可预测的行为。
|
28天前
|
编译器 C语言
共用体和结构体在 C 语言中的优先级是怎样的
在C语言中,共用体(union)和结构体(struct)的优先级相同,它们都是用户自定义的数据类型,用于组合不同类型的数据。但是,共用体中的所有成员共享同一段内存,而结构体中的成员各自占用独立的内存空间。
|
1月前
|
存储 C语言
C语言32位或64位平台下指针的大小
在32位平台上,C语言中指针的大小通常为4字节;而在64位平台上,指针的大小通常为8字节。这反映了不同平台对内存地址空间的不同处理方式。
|
28天前
|
存储 C语言
C语言:结构体与共用体的区别
C语言中,结构体(struct)和共用体(union)都用于组合不同类型的数据,但使用方式不同。结构体为每个成员分配独立的内存空间,而共用体的所有成员共享同一段内存,节省空间但需谨慎使用。
|
1月前
|
编译器 C语言 C++
C语言结构体
C语言结构体
25 5