C语言超详细讲解指针与结构体
itnanba · 169浏览 · 发布于2022-05-06 +关注

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

本节目标

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

初识指针

1、内存与地址

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

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

2、变量的地址

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

取出变量地址如下:

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

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;}

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;}

*所以:指针大小在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 的地址赋给 psprintf("%s\t%d\t%s\t%s\n", ps->name, ps->age, ps->sex, ps->id);return 0;}

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


c

相关推荐

PHP实现部分字符隐藏

沙雕mars · 1133浏览 · 2019-04-28 09:47:56
Java中ArrayList和LinkedList区别

kenrry1992 · 665浏览 · 2019-05-08 21:14:54
Tomcat 下载及安装配置

manongba · 730浏览 · 2019-05-13 21:03:56
JAVA变量介绍

manongba · 813浏览 · 2019-05-13 21:05:52
什么是SpringBoot

iamitnan · 780浏览 · 2019-05-14 22:20:36
加载中

0评论

评论
分类专栏
小鸟云服务器
扫码进入手机网页