(用0基础的思维让你理解指针和结构体)初识C语言(0基础开始)五

简介: (用0基础的思维让你理解指针和结构体)初识C语言(0基础开始)五

(今天我们继续来学习指针,讲完这章后估计有同学会问?指针这就结束了吗?其实不是,这篇文章只是让大家初步了解指针,可以看懂代码,并自己可以写出一些简单的代码,并不需要过度深究,复杂的我们以后再学。)


指针:


在讲指针之前我们先来介绍一下内存:


1.内存是电脑上特别重要的存储器,计算机中程序的运行都是在内存中进行的 。

2.所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是 1个字节。

3.为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该 内存单元的地址。

变量是创建内存中的(在内存中分配空间的),每个内存单元都有地址,所以变量也是有地址的。


那么如何取出变量中的地址呢?


举例:

#include <stdio.h>
int main ()
{
int num = 10 ;
& num ; // 取出 num 的地址
    // 注:这里 num 的 4 个字节,每个字节都有地址,取出的是第一个字节的地址(较小的地址)
printf ( "%p\n" , & num ); // 打印地址, %p 是以地址的形式打印
return 0 ;

那么我们取出地址后,如何 储存变量的地址 呢?这又引出来一个概念: 指针变量。

理解记忆:(先牢记:指针就是地址,指针变量也就是地址变量。像生活中也有地址嘛,门牌号,单元号啥的,知道了你的地址才能迅速找到你,C语言中这么多数据如何精准定位某个数据呢,这时候也需要知道某个数据的地址,C语言中数据的地址就是地址编号嘛,不要把指针想得过于复杂,他就是一个数据的地址嘛。)

先看这个例子:

int main ()
{
int num = 10 ;         1
int * p = & num ;       2
    return 0 ;

解释:第1行,我们定义了一个 整形变量num,

         第2行。等号右边的内容我们取出了num的地址,等号左边的内容我们 定义一个指针变量来存放num的地址,这个整形指针变量的类型是int *。这颗 星表明它是 指针, int表明 指针所指向的数据为整形。

现在我们已经把num的地址给存起来了,那么我们 如何通过它的地址找到它 来想对他做出一些改变呢?接下来再看一个例子:

int main ()
{
int num = 10 ;         1
int * p = & num ;       2
  *p=20;            3
    return 0 ;

第三行这个 * 是 解引用操作符 的意思,它的作用是 通过地址找到储存的内容。 我们这里 *p=20 的意思就是通过num的地址找到它,把它的值修改成20,这时候num的值就成20了。

下面是代码和运行结果:

指针的介绍就初步介绍到这里。


结构体:


结构体 是 C 语言中特别重要的知识点,结构体使得 C 语言有能力描述 复杂类型 。

那么我们怎样 引出结构体这个概念 的呢?我们生活中的 复杂数据 用其他类型根本无法描述,

比如描述 学生 ,学生包含: 名字 + 年龄 + 性别 + 学号 这几项信息。 这里只能使用 结构体 来描述了。

先看下面这行代码:

struct Stu
{
    char name [ 20 ]; // 名字
    int age ;       // 年龄
    char sex [ 5 ];   // 性别
    char id [ 15 ] ; // 学号
};

解释:

struct是结构体关键字。struct Stu是你自己定义的类型。


接下来我们初始化一个结构体:


struct Stu  s = {"张三", 20, "男", "6666“}


这个代码的意思是:定义了一个名字为s的结构体变量。


(大括号中的内容依次对应上述自定义中大括号的数据,这个也很好理解)


如何使用结构体变量呢?看下面这一行代码。


printf ( "name = %s age = %d sex = %s id = %s\n" , s . name , s . age , s . sex , s . id );

那个 点(.) 就是 结构体访问操作符 。(也很符合逻辑,不难理解)

对结构体的初级学习就到这里,后面我们会详细学习。


初始C语言的内容就结束了,从下篇文章开始会给大家对C语言进行较为详细的解释,开始新的学习。

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