谈到指针,除了常听到的整形指针、字符指针,还有函数指针、数组指针、常量指针,也有一些指针相关的指针常量、指针数组等等。是不是听着有点迷糊?
这里,我就指针的那些事,谈谈我对它们的理解。以下谈到的都是一级指针!
1. 整形指针、字符指针
注意看,这些都是指针,但是前面的修饰词不一样。
整形指针 int* p;
字符指针 char *p;
2. 数组指针 & 指针数组
先给出C语言中对其的定义。
a. 数组指针 char (*p)[10];
说明:所谓数组指针,修饰词是数组,所以,是一个指针,该指针 指向 一个字符数组。
b. 指针数组 char* p[10];
说明: 所谓指针数组,它本质是一个数组,数组当中存放的是char*类型的数据。
3. 常量指针 & 指针常量
首先说一下怎么快速的记住他们的区别,只需要按照命名的顺序来读,就可以很好地记忆(仅适用于常量指针和指针常量)。下面给出它们C语言中的定义,大家结合命名顺序+定义形式,好好理解一下。
a. 常量指针 const int *p;
说明:因为const的功能就是限定不可以修改,所以我们看到常量指针是先有const, 后有*p。而*p代表是内存中的值,也就是说,指针p指向的内存数据,是不可以通过指针来进行修改的。但是,指针的指向是可以变的。
b. 指针常量 int* const p;
说明:因为const的功能就是限定不可以修改,所以我们看到指针常量是先有了int *指针,再有的const修饰p 所以p的值(指向的内存地址) 是不可以修改的。也就是const限制的是指针p的值,但是没有限定p指向的内存地址里的数据,所以内存的数据可以修改
4. 函数指针
所谓的函数指针,就是一个指针,指向的是一个函数。其通用的数据格式如下
Type (*name)(Type,Type...)
Type可以是void、int、char、float等等
Eg: void (*p)(char*)---在此处定义了一个函数指针p,指向一个形参为字符指针、返回值为void类型的函数。
下面给出具体的使用样例。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void func(char *p)
{
char str[10] = {"hello"};
strcpy(p,str);
}
int main()
{
char p[10] = {0};
void (*func_p)(char*);
func_p = func;
func_p(p);
printf("main p=%s\n",p);
}
main p=hello
总结:以上就是对指针相关的一些总结,欢迎大家评论。