(用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语言进行较为详细的解释,开始新的学习。

如果对本系列有什么建议,欢迎留言,您的点赞是我更新的动力,我们下篇再见。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
好的,以下是一个完整的包含指针结构的 C 语言代码示例: ``` #include <stdio.h> #include <stdlib.h> // 定义一个结构 struct Person { char name[20]; int age; }; // 声明一个函数,用于创建 Person 结构并返回其指针 struct Person* createPerson(char* name, int age) { // 动态分配一个 Person 结构的内存,并将其指针赋值给 p struct Person* p = (struct Person*) malloc(sizeof(struct Person)); // 设置 p 指向的结构的字段值 strcpy(p->name, name); p->age = age; // 返回 p 指针 return p; } int main() { // 调用 createPerson 函数创建一个 Person 结构并获取其指针 struct Person* p = createPerson("Tom", 25); // 输出 p 指向的结构的字段值 printf("Name: %s\n", p->name); printf("Age: %d\n", p->age); // 释放分配的内存空间 free(p); return 0; } ``` 在这个代码示例中,我们定义了一个名为 Person 的结构,它包含两个字段:一个字符串类型的 name 和一个整数类型的 age。然后,我们声明了一个名为 createPerson 的函数,它接受一个字符串类型的 name 和一个整数类型的 age 作为参数,并返回一个指向 Person 结构指针。在 createPerson 函数中,我们使用 malloc 函数动态地分配了一个 Person 结构的内存,并将其指针赋值给 p。接着,我们使用指针操作符 -> 访问 p 指向的结构的字段,并设置它们的值。最后,我们返回 p 指针。在 main 函数中,我们调用 createPerson 函数来创建一个 Person 结构并获取其指针。然后,我们输出 p 指向的结构的字段值,并使用 free 函数释放了分配的内存空间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT牛爷爷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值