C语言指针与结构体基础:从内存地址到复杂数据定义

小林子
小林子
发布时间:2026-10-16| 7人浏览过
原创

指针与结构体是C/C++语言学习中的核心难点。指针用于处理内存地址,而结构体用于组合多个不同类型的变量。掌握这两者不仅能有效管理内存资源,还能灵活描述如学生档案等复杂的业务对象。

一、 指针基础与内存模型

指针本质上是存储内存地址的变量。在计算机运行时,程序数据都加载在内存中。为了高效访问,内存被划分为以字节(Byte)为基本单位的存储单元,每个单元拥有唯一的编号,即内存地址。

理解以下关键点:

  • 取地址:使用 & 运算符获取变量的首字节地址(对于多字节类型如 int,系统通常分配连续空间)。打印时建议使用 %p 格式符。
  • 解引用:使用 * 运算符配合指针变量名,可以访问该地址指向的内存中的数据并对其进行修改。
#include <stdio.h>
int main()
{
	// 变量num占用4个字节(通常为int),编译器为其分配内存并赋予地址
	int num = 10;

	// &num 取出 num 的地址(第一个字节的地址)
	printf("num的地址: %p\n", &num);

	// 定义整型指针 p,将其指向 num 的地址
	int* p = &num;

	// 通过解引用 *p 修改 num 的值
	*p = 20; 
	printf("解引用后的值: %d\n", *p); // 输出 20

	return 0;
}

在指针的大小方面,它取决于操作系统和编译平台的寻址能力,而非其指向的数据类型:

  • 32位平台 (X86):指针占用 4 个字节(32 bits),因为地址总线为32位。
  • 64位平台 (X64):指针占用 8 个字节(64 bits),地址空间更大。

可以通过 sizeof 验证不同数据类型指针的空间大小:

#include <stdio.h>
int main()
{
    // 无论指向 char, int 还是 double,指针本身的大小仅由平台位数决定
    printf("char* size: %ld\n", sizeof(char *));
    printf("int* size: %ld\n", sizeof(int *));
    return 0;
}

二、 结构体的定义与应用

当需要表示具有多种属性关联的复杂实体(例如一名学生的姓名、年龄、性别和学号)时,可以使用结构体(Struct)。它将不同的数据类型打包在一起,形成一个自定义的复合数据类型。

第1步:定义结构体模板

使用 struct 关键字声明结构体名称及其包含的成员变量。

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

第2步:创建实例并初始化

定义结构体类型后,可以像普通变量一样创建其实例并进行赋值。

struct Stu s = { "张三", 20, "男", "20180101" };

第3步:访问结构体成员

C语言提供了两种主要方式访问成员:

  1. . 操作符:直接通过结构体变量名访问,例如 s.age。
  2. -> 操作符:专门用于结构体指针。通过取地址(&s)将变量地址存入指针 ps 后,使用 ps->age 即可便捷读取或修改数据。
#include <stdio.h>
// ... 上文结构体定义代码 ...
int main()
{
    struct Stu s = { "张三", 20, "男", "20180101" };

    // 直接使用 . 访问
    printf("使用 . : name=%s\n", s.name);

    // 定义指针并通过 -> 访问
    struct Stu* ps = &s;
    printf("使用 ->: name=%s\n", ps->name);

    return 0;
}

总结

指针操作让程序员能够精确控制内存,而结构体则极大地增强了C语言对现实世界复杂数据的建模能力。二者结合使用时,经常需要通过结构体指针来传递或修改对象内容。以上就是C语言一看就懂的指针与结构体介绍的详细内容,更多关于C语言入门与进阶的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。