Linux C – C基础篇七(指针高级用法)

Linux C – C基础篇七(指针高级用法)指针与结构体先简单介绍下结构体C语言中结构体从本质上讲是一种自定义的数据类型。声明一个结构体的方式如下:structstudent{charna

大家好,欢迎来到IT知识分享网。

指针与结构体

先简单介绍下结构体

C语言中结构体(Struct)从本质上讲是一种自定义的数据类型,只不过这种数据类型比较复杂,是由 int、char、float 等基本类型组成的。由于结构体将一组相关的变量看作一个整体而不是各自独立的实体,因此结构体有助于组织复杂的数据,特别是在大型的程序中,结构体非常常见。声明一个结构体的方式如下:

struct student {

char name[16];

int age;

int score;

};

如下,定义一个结构体变量,并通过”结构体变量名字.成员名字”的方式访问结构体变量里面的成员:

struct student stu;

stu.name = “张三”;

stu.age = 15;

int a = stu.score;

结构体指针变量:结构体指针变量是指向结构体的指针,以上面的结构体为例,可以这样定义如下的结构指针变量:

struct student *stu1;

访问指针变量里面的成员,我们通常使用->,如下:

stu1->age = 15;

但是上面的操作是错误的,因为stu1是结构体指针变量,并没有指向某一块地址,也就是我们所谓的野指针,那么直接访问它是会导致段错误的,正确的做法是给这个指针变量赋值,让它指向另一个同类型的结构体地址:

stu1 = &stu; //stu是我们在上面定义的结构体变量,加上&表示取地址

stu1->age = 15;

或者通过调用库函数malloc申请一块大小为对应结构体大小的内存地址,赋值给结构体指针变量,然后就可以给结构体指针变量所指向的内存地址赋值:

stu1 = malloc(sizeof(struct strudent));

stu1->age = 15;

这种用法在内核代码中非常常见(Linux内核中使用kmalloc申请内存):

Linux C - C基础篇七(指针高级用法)

指针与函数

指针函数

指针函数本质是一个函数,只不过它的返回值是一个地址(指针),当我们调用这些函数的时候需要用同类型的指针变量来接收。例如:

char * strcpy(char *dest, const char *src);

int *func(int x,int y);

void *malloc(size_t size);

int *a = func(3, 5);

函数指针

函数指针本质是一个指针变量,只不过它指向的类型是一个函数,那么这个变量只能被一个函数赋值。如下,这种用法在内核中非常常见:

在结构体中定义函数指针:

Linux C - C基础篇七(指针高级用法)

给函数指针赋值:

Linux C - C基础篇七(指针高级用法)

总结:

关于指针的应用在Linux中无论是应用层代码中还是kernel内核代码中应用都是非常普遍的,深入的理解指针不经能使自己写出高效的代码,更能让你非常容易的读懂大型项目中的代码。

Linux C - C基础篇七(指针高级用法)

以上是老韩关于Linux c基础指针的总结欢迎一起讨论,如有不足欢迎指点;对Linux c或者Linux驱动感兴趣的朋友可以收藏关注,我会持续更新的,谢谢支持!

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/53818.html

(0)
上一篇 2024-08-03 19:26
下一篇 2024-08-04 22:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信