服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C语言超详细讲解指针与结构体

C语言超详细讲解指针与结构体

2022-11-23 11:59野猪佩奇` C/C++

指针提供了对地址操作的一种方法,因此,使用指针可使得C语言能够更高效地实现对计算机底层硬件的操作。另外,通过指针可以更便捷地操作数组。C数组允许定义可存储相同类型数据项的变量,结构是C编程中另一种用户自定义

本节目标

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

初识指针

1、内存与地址

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

*所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是1个字节。 *同时为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。

C语言超详细讲解指针与结构体

2、变量的地址

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

取出变量地址如下:

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

C语言超详细讲解指针与结构体

C语言超详细讲解指针与结构体

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
", num);return 0;}

C语言超详细讲解指针与结构体

C语言超详细讲解指针与结构体

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
", sizeof(char*));   printf("%zu
", sizeof(short*));printf("%zu
", sizeof(int*));printf("%zu
", sizeof(double*));return 0;}

C语言超详细讲解指针与结构体

C语言超详细讲解指针与结构体

*所以:指针大小在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	%d	%s	%s
", s.name, s.age, s.sex, s.id);// -> 操作符struct Stu* ps = &s;  //定义结构体指针变量 ps 并将 s 的地址赋给 psprintf("%s	%d	%s	%s
", ps->name, ps->age, ps->sex, ps->id);return 0;}

C语言超详细讲解指针与结构体

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

到此这篇关于C语言超详细讲解指针与结构体的文章就介绍到这了,更多相关C语言指针与结构体内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文地址:https://blog.csdn.net/m0_62391199/article/details/124141089

延伸 · 阅读

精彩推荐
  • C/C++C++中继承与组合的区别详细解析

    C++中继承与组合的区别详细解析

    C++的“继承”特性可以提高程序的可复用性。正因为“继承”太有用、太容易用,才要防止乱用“继承”...

    C++教程网11412021-01-01
  • C/C++C语言 联合(union)用法案例详解

    C语言 联合(union)用法案例详解

    这篇文章主要介绍了C语言 联合(union)用法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下...

    时光漫走6152021-12-23
  • C/C++Windows进程崩溃问题的定位方法

    Windows进程崩溃问题的定位方法

    这篇文章主要介绍了Windows进程崩溃问题的定位方法,本文使用nstd工具进行进程崩溃时内存和堆栈转储的方法查明问题所在,需要的朋友可以参考下...

    C语言教程网7092021-02-24
  • C/C++共用体的定义与应用详细解析

    共用体的定义与应用详细解析

    共同体的定义类似结构体,不过共同体的所有成员都在同一段内存中存放,起始地址一样,并且同一时刻只能使用其中的一个成员变量...

    C语言教程网2902020-12-24
  • C/C++VC中删除类的两种操作方法

    VC中删除类的两种操作方法

    这篇文章主要介绍了VC中删除类的两种操作方法,较为详细的描述了在VC中实现删除类的具体步骤,非常具有实用价值,需要的朋友可以参考下 ...

    好人一个9112021-02-26
  • C/C++c语言阶乘之和问题示例详解

    c语言阶乘之和问题示例详解

    这篇文章主要给大家介绍了关于c语言阶乘之和问题的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用c语言具有一定的参考学习价值,...

    xiaoli1301344962021-08-01
  • C/C++Matlab实现生成箭头坐标轴详解

    Matlab实现生成箭头坐标轴详解

    这篇文章主要介绍了如何利用Matlab实现生成箭头坐标轴,为坐标轴增添箭头,文中的示例代码讲解详细,对我们学习Matlab有一定帮助,需要的可以参考一下...

    slandarer5612022-10-21
  • C/C++C++类型转换运算符的实例详解

    C++类型转换运算符的实例详解

    这篇文章主要介绍了C++类型转换运算符的实例详解的相关资料,希望通过本文大家能够掌握这部分内容,需要的朋友可以参考下...

    blueberry_mu7432021-06-01