美文网首页
C语言声明指针小结

C语言声明指针小结

作者: Trump丶 | 来源:发表于2019-06-02 09:50 被阅读0次

博客开了这么久,都没写什么技术性的文章,恰好最近在看C语言相关的东西,学会一些关于指针声明的小技巧,记录一下。
言传我也不太说话,直接意会吧

变量指针

int *p = NULL;  // 指向 整形变量 的指针
int **p = NULL;  // 指向 整形指针变量 的指针

常量指针,常指针

const int *p = NULL;  // 指向 整形常量 的指针
int *const p = NULL;  // 指向 整形 的常指针
const int *const p = NULL;  // 指向 整形常量 的常指针

数组指针,指针数组

int *p[4] = {NULL};  // 大小为4的数组,每个元素都是指向整形变量的指针
int (*p)[4] = NULL;  // 指向 一个大小为4的整形数组 的指针,自增时每次加4 * sizeof(int)
int *(*p)[4] = NULL;  // 指向 一个大小为4的指针数组 ,该数组的每一个元素都是指向整形变量的指针
int *p[3][4] = {NULL};  // 3 * 4的二维数组,每一个元素都是指向整形变量的指针
int (*p)[3][4] = NULL;  // 指向 大小为3 * 4的二维整形数组 的指针,自增时每次加3 * 4 * sizeof(int)
int *(*p)[3][4] = NULL;  // 指向 大小为3 * 4的二维整形指针数组 的指针,该数组每一个元素都是指向整形变量的指针
int (*(*p)[3])[4] = NULL;  // 指向一个指针,这个指针又指向一个大小为3的指针数组,数组的每一个元素指向一个大小为4的整形数组
int *(*(*p)[3])[4] = NULL;  // 指向一个指针,这个指针又指向一个大小为3的指针数组,数组的每一个元素指向一个大小为4的整形指针数组

函数指针

int *p(int) = NULL;  // 有一个整形形参,返回值为整形指针的函数
int (*p)(int) = NULL;  // 指向 有一个整形形参,返回值为整形变量的函数 的函数指针
int *(*p)(int) = NULL;  // 指向 有一个整形形参,返回值为整形指针的函数 的函数指针
int *(*p)(int*) = NULL;  // 指向 有一个整形指针参数,返回值是整形指针的函数 的函数指针
int *(*p)(int, int*) = NULL;  // 指向 有一个整形参数,一个整形指针参数,返回值是整形指针的函数 的函数指针

混合

int *(*(*(*p)(int*))[3])(int*[ ], int*) = NULL;  // P是一个函数指针,指向一个有一个整形指针参数的函数,这个函数的返回值是指向数组的指针,数组的每一个元素也是一个函数指针,指向一个 返回值为整形指针,参数为一个整形指针数组和一个整形指针 的函数

分析

稍微有点乱,但是,不难发现其中的规律。

*p表示一个指针,但是 * 符号的优先级没有( )和[ ]高。所以 int *p[ ] 和 int (*p)[ ] 就有一些区别了,一个是 指针数组,一个是数组指针


int *p[ ];  [ ]优先级比*高,所以p是数组,那么把p[]用手遮住,剩下的就是数组的类型了,也就是int*,整形指针类型。


int (*p)[ ];  *p被括号括起来了,优先级最高,所以p是指针,用手把*p遮住,剩下的就是指针所指向的类型了,也就是int [ ],整形数组类型。


那么,同样的方法,可以分析一下其他的声明。如int *p(int);和int (*p)(int);


int *p(int);  乍一看像一个指针,但是这是一个函数声明,( )优先级比[ ]高,所以p是一个函数,所以把p(int)遮住,剩下int*,所以p是一个参数为整形,返回值为整形指针的函数。


int (*p)(int);  这个就是一个指针声明了,p是指针,遮住(*p),剩下int   (int),所以p指向   一个参数为整形,返回值为整形  的函数。



方法就是这么个方法,其他分析自己多思考吧。

相关文章

  • C语言声明指针小结

    博客开了这么久,都没写什么技术性的文章,恰好最近在看C语言相关的东西,学会一些关于指针声明的小技巧,记录一下。言传...

  • C语言指针小结

    转自CSDN博客 原文链接:http://blog.csdn.net/xinyuwuxian/article/de...

  • C语言指针小结

    前言:指针的学习    在c语言的学习过程中,指针的学习无疑是其中的一道难关,相对来说比较复杂,但是只要从地址和内...

  • C语言指针小结

    有关指针的数据类型的小结 int i; 定义整型变量 iint *p; p 为指向整型数据的指针变量int a[...

  • C语言指针小结1

    1. 指针数组是一个数组,它的元素是一个指针。 2. 数组指针是一个指针,它指向数组的首地址。 3. 指针函数是一...

  • C语言指针小结(1)

    变量名 对内存空间上的一段数据的抽象int* 声明指针*p p地址上的值&p 获取指针地址指针存储的是内存地址

  • C语言指针之---指针声明与取值

    普通类型变量的声明 char a =10 ; //声明一个char类型,值为10的a变量short b = 20;...

  • C语言05- 指针

    C语言05- 指针 13:指针 指针是C语言中的精华,也是C语言程序的重点和难点。 13.1:指针定义与使用 指针...

  • OC block基本操作--Block的声明、赋值与调用

    Block的声明、赋值与调用 Block变量的声明 和C语言的函数指针声明几乎一样,只是将”*”改为”^”.如下:...

  • 02-C语言的指针

    02-C语言的指针 目标 C语言指针释义 指针用法 指针与数组 指针与函数的参数 二级指针 函数指针 指针在C中很...

网友评论

      本文标题:C语言声明指针小结

      本文链接:https://www.haomeiwen.com/subject/uugjuftx.html