C语言中指针数组和数组指针、函数指针、指向函数的指针等等该怎么理解?
对于C语言的指针,其实不难理解。
万变不离其宗,最简单的理解指针就是“地址”,无论什么类型的指针(整数,数组,字符串,函数等),指针的值都是一个整形数值,是所指向的一个此类型实际变量在内存中的首地址。
因此,不管如何花哨的名字,指针就是一个内存地址而已,如,字符指针是一个字符串的内存首地址,函数指针无非是一个函数在内存的首地址,通过这个地址,可以对对应变量进行操作。
所谓指针数组,首先是个数组,只是用来保存指针的数组,就是一个保存若干个指针地址的数组而已。
从实际情况看,指针的价值有几点,一是提供了一种”按位置和顺序”操作变量的方式,二是在函数调用时,提供了被调用函数形参和调用函数实参的统一,增加了程序灵活性,简化了变量的使用,可以说,C语言的指针,是其是最具生命力和最有价值的特性之一,相比其他语言,在开发中大型应用时提供非常高的效率,也是其他开发语言无法具备的。
在C语言中,指针是最容易造成内存越界而程序崩溃的因素,因此需要特别小心。
因此,在实际开发中,除非特别必要,对指针的使用要慎重,以免增加运行的风险和维护的难度。实际场景中,指针最适合用在 ”首地址+偏移量”类操作能带来更便捷或性能提升很多的情况,最典型的如字符串处理操作,否则的话,如可以不用指针,则尽量不要用。
如果老师有一个表格,表格上就是本班学生的名字,这是普通数组;如果把名字改为学生的住址,就是指针数组;如果老师有很多这类(写着学生住址)的表格,并且每个表格需要单独放在一个地方,这个地方就是数组指针;如果你发现某些地址不是直接写,而是“小明家对面”;“小红家的隔壁”,之类的,这种描述就是指针函数;而“小明家对面”对应的真实地址,就是指向函数的指针。
指针数组是说这个数组是指针型的,这个数组里面存的数据是指针型数据。
数组指针:是说这个指针是指向数组的。
函数指针和指向函数的指针应该是一样的吧。都是说指针,这个指针指向函数
c语言指针数组用法?
C语言 函数指针 函数指针数组的用法
* pointer1 //该指针指向从该地址开始一个1字节的内容
short int* pointer2; //该指针指向从该地址开始一个2字节的内容
long int* pointer3; //该指针指向从该地址开始一个4字节的内容
long long int* ponter4; //该指针指向从该地址开始一个8字节的内容
pointer1++ 使其对应内存地址移动一个字节
pointer2++ 使其对应内存地址移动两个字节
pointer3++ 使其对应内存地址移动三个字节
pointer4++ 使其对应内存地址移动四个字节
typedef void(*FUNC)(void); //定义函数指针类型FUNC
结构体指针数组如何定义并动态申请空间?
结构体指针数组可以通过以下方式定义并动态申请空间:先定义结构体类型,然后定义结构体指针数组,再使用malloc函数动态申请空间。例如,定义结构体类型为student,结构体指针数组为stu,动态申请10个元素的空间,可以使用如下代码:
```
typedef struct{
char name[20];
int age;
float score;
}student;
student *stu[10];
for(int i=0; i<10; i++){
stu[i] = (student*)malloc(sizeof(student));
}
```
这样就定义了一个名为stu的结构体指针数组,其中每个元素指向一个student类型的结构体,数组长度为10,且每个元素都动态申请了一个student类型结构体所占用的空间。