龙空技术网

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

嵌入式Linux技术分享 414

前言:

眼前大家对“c语言指针变量赋值”大约比较珍视,咱们都需要了解一些“c语言指针变量赋值”的相关资讯。那么小编在网络上收集了一些对于“c语言指针变量赋值””的相关文章,希望大家能喜欢,姐妹们快快来了解一下吧!

指针与结构体

先简单介绍下结构体

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申请内存):

指针与函数

指针函数

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

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

int *func(int x,int y);

void *malloc(size_t size);

int *a = func(3, 5);

函数指针

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

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

给函数指针赋值:

总结:

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

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

标签: #c语言指针变量赋值