初识C语言第三话之指针与结构体

简介: 初识C语言第三话之指针与结构体

本节目标

理解内存与地址的相关概念,初步掌握指针的定义与使用,理解结构体的概念,掌握其基本的使用及访问方法。

初识指针

1、内存与地址

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

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

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

2020062310470442.png

2、变量的地址

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

取出变量地址如下:

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

2020062310470442.png

2020062310470442.png

3、指针变量

*指针变量:用来存放指针的变量(指针就是地址)。

#include<stdio.h>
{
  int num = 10;
  int *p;//p为一个整形指针变量,int*是p的类型,其中*代表p是一个指针,int表示p指向的变量的类型是int的。
  p = &num;
  return 0;
}

4、指针的使用

#include <stdio.h>
int main()
{
  int num = 10;
  int* p = &num;
  *p = 20;
  printf("%d\n", num);
  return 0;
}

2020062310470442.png

2020062310470442.png

int* p = &num :定义一个指针变量 p,并将 num 的地址赋给 p,这时 p 里面存放的就是 num 的地址,也就是说 p 指向了 num;

*p = 20 :* 是解引用操作符,*p 就是对 p 进行解引用,就是通过 p 里面存放的 num 的地址找到 num,并将 num 空间中存放的数据10修改为20;

5、指针变量的大小

#include <stdio.h>
int main()
{
  //%zu:用来打印无符号整型,与 %u 相似
  printf("%zu\n", sizeof(char*));   
  printf("%zu\n", sizeof(short*));
  printf("%zu\n", sizeof(int*));
  printf("%zu\n", sizeof(double*));
  return 0;
}

2020062310470442.png

20200623104134875.png

*所以:指针大小在32位平台是4个字节,64位平台是8个字节。(本质是因为不同平台下的地址线数量不同)

初识结构体

1、什么是结构体

结构体是C语言中一种重要的数据类型,该数据类型由一组称为成员(或称为域,或称为元素)的不同数据组成,其中每个成员可以具有不同的类型。结构体通常用来表示类型不同但是又相关的若干数据。

结构体类型不是由系统定义好的,而是需要程序设计者自己定义的。C语言提供了关键字struct来标识所定义的结构体类型。


关键字struct和结构体名组合成一种类型标识符,其地位如同通常的int、char等类型标识符,其用途就像 int 类型标识符标识整型变量一样可以用来定义结构体变量。定义变量以后,该变量就可以像定义的其他变量一样使用了;成员又称为成员变量,它是结构体所包含的若干个基本的结构类型,必须用“{}”括起来,并且要以分号结束,每个成员应表明具体的数据类型。

2、结构体的定义

下面我们以学生来举例:假设一个学生包括姓名、年龄、性别、学号五个信息,为了能够整体的描述一个学生,我们可以定义一个结构体类型。

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

3、结构体的使用

#include<stdio.h>
int main()
{
  //定义结构体变量并对其进行初始化
  struct Stu s = { "张三",18,"nan","220210101" };
  //两种结构体访问操作符
  // . 操作符
  printf("%s\t%d\t%s\t%s\n", s.name, s.age, s.sex, s.id);
  // -> 操作符
  struct Stu* ps = &s;  //定义结构体指针变量 ps 并将 s 的地址赋给 ps
  printf("%s\t%d\t%s\t%s\n", ps->name, ps->age, ps->sex, ps->id);
  return 0;
}

2020062310470442.png

注意:-> 操作符只能在已经有结构体指针的情况下才能使用。




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