今天无意间看到一篇文章《【C语言】 浅谈指针 》,对C语言指针的总结很好! 文章地址:http://blog.csdn.net/wbq1480/article/details/51506124

写了几段代码,再巩固一下C语言知识。

我的记忆方法跟文章中的不一样。

*是取值符号,&取地址符号,()限定子表达式的符号,[]是按索引取数组乘员的符号。

优先级方面()>[]>*,&。

对于int *(*p(int))[3]; 。我是这么分析的:
int *(*p(int))[3]=>int *p1[3]:等价于 int *p1[3]
1、表示取p1里的某个元素是int指针,那么p1是一个数组,里面的东西全部是指针
p1=>*p2,p2=>p(int)
2、表示取了p2的值才是p1,显然p2也是指针(指向数组的指针);p2等效于一个函数调用,那么p一个函数

整个表达式相当于一个函数声明,返回值是指针,指向的是数组,数组的乘员又是指针。编译之后不会产生任何代码。如果要写fuck brain的代码可以用这种方式写函数声明头文件,把别人绕晕。

这里要特别注意返回的是指针,所以符合语法规则。如果把这个函数的返回值typedef成一个类型,那么就较容易理解了。

如果要写这种绕脑的代码,最好typedef一下:typedef int* (*int_array_ptr)[3];。

下面是随便写的一段代码,验证一下这个问题。

typedef int* (*int_array_ptr)[3];//这里必须要指定长度,sizeof(int_array_ptr)才知道长度
typedef int* int_array [];
typedef int* (*func_ptr)(int);typedef int func_type(int);
int* TestFunc(int a)
{printf("TestFunc\n");return 0;
}int** TestFunc2(int a)
{printf("TestFunc2\n");return NULL;
}int func2(int a)
{printf("func2\n");return NULL;
}int main()
{int *(*ps1(int))[3];int *(*(ps2(int)))[3];int a = 1;int *b = &a;int *c = &*b;int d = *&a;printf("a=%d\n", a);printf("*b=%d\n", *b);printf("*c=%d\n", *c);printf("d=%d\n", d);//int **(ps3(int))[3];//int ** ps4(int)[3];int_array_ptr ps5(int);//函数声明//int *((*ps)(int))[3];//int* (*p)(int)[3];func_ptr func[3];//数组声明,数组的成员是函数指针func_type func2;//函数声明int size = sizeof(func_type*);        int size = sizeof(func_type);//语法错误,对一个函数使用sizeof不成立func2(3);//只有有实现的函数才能调用,如果把func2的实现删除,编译会报找不到符号//printf("ps1=%X\n", &ps1);//函数没有实现,所以ps1不存在,编译报找不到符号//printf("ps2=%X\n", &ps2);//printf("funcptr=%X\n", func);printf("funcarrayptr=%X\n", &func);printf("func2ptr=%X\n", &func2);//memcpy(&func2,&TestFunc2,4);//不能修改代码段的数据,执行报错,&func2指向程序代码段中的地址,        //一个程序平坦的内存被划分为代码段、数据段//p = func[0];return 0;
}

转载于:https://www.cnblogs.com/tgis/p/5531605.html

巩固一下C语言中的指针相关推荐

  1. c语言中程序偏离,C语言中的指针加减偏移量

    首先看一段程序: #include int main() { int a[5] = {1, 2, 3, 4, 5}; int* p = (int*)(&a + 1); printf(" ...

  2. c语言中指针的类型,学习C语言中的指针类型

    摘要:结合我院学生十年来参加全国计算机等级考试(C语言部分)情况,通过分析成绩分布与题型关系,我们发现指针方面的题型失分率最高.在此基础上结合教学实际,本文提出学习指针知识的方法和顺序过程,并将其应用 ...

  3. c语言二级指针有什么作用,C语言中二级指针的实例详解

    C语言中二级指针的实例详解 C语言中二级指针的实例详解 用图说明 示例代码: #include int main(int argc, const char * argv[]) { // int a = ...

  4. C语言中的指针有什么作用

    C语言中的指针的作用是:通过指针不仅可以对数据本身,还可以对存储数据的变量地址进行操作.指针就是内存地址,指针变量是用来存放内存地址的变量. 指针定义: 指针,是C语言中的一个重要概念及其特点,也是掌 ...

  5. 指针在c语言中的运用,怎么理解C语言中的指针,如何运用?

    恰好我之前写了一系列介绍 C 语言的文章,介绍了什么是指针,以及为什么要使用指针,下面摘录一部分,感兴趣的话,可以点我了解更多. 什么是 C语言指针? 不同的数据类型的主要区别在于占用的存储空间不同. ...

  6. c语言中数组的概念及作用,详解C语言中的指针与数组的定义与使用

    指针的特点 他就是内存中的一个地址 指针本身运算 指针所指向的内容是可以操作的 操作系统是如何管理内存的 栈空间 4M~8m的大小 当进入函数的时候会进行压栈数据 堆空间 4g的大小 1g是操作系统 ...

  7. 详解:C语言中的指针和p, p+1, *(p+1), *P+1, p[0], p[0] 的含义

    解析:C语言中的指针和p, p+1, *(p+1), *P+1, p[0], &p[0] 每一种表达式的含义  一.先解决一个问题:什么是指针 指针就是存放地址的变量.很好,百度上就是这个答案 ...

  8. c语言野指针应用,C语言中野指针的深入解析

    C语言中野指针的深入解析 C语言中野指针这一块是C语言的难点,下面小编为大家带来了C语言中野指针的深入解析,欢迎大家阅读! "野指针"的成因主要有两种: (1)指针变量没有被初始化 ...

  9. 图解C语言中数组指针、指针数组、函数指针、函数指针数组、指向函数指针数组的指针

    关于C语言中数组指针.函数指针.指针数组.函数指针数组.指向函数指针数组的指针一直比较绕,稍微整理一下. 到底是指针还是数组? 其实到底是指针还是数组还是看变量名与[]先结合还是*先结合.我们知道C语 ...

  10. C语言中的指针和内存泄漏

    对于任何使用 C 语言的人,如果问他们 C 语言的最大烦恼是什么,其中许多人可能会回答说是指针和内存泄漏.这些的确是消耗了开发人员大多数调试时间的事项.指针和内存泄漏对某些开发人员来说似乎令人畏惧,但 ...

最新文章

  1. tcpdump抓包并保存到远程服务器
  2. HD 2048 数塔 DP(简单递推)
  3. mysql事务隔离级别与锁_mysql事务隔离级别与锁
  4. 当字段过长,鼠标移上去才展示全部,默认只展示部分防止表格比例发生变化
  5. Think in Java第四版 读书笔记9第15章 泛型
  6. EasyUI中的combobox下拉框自适应高度
  7. 学好 Python 的 11 个优秀资源【转载】
  8. 如何使用 SQL 对数据进行分析?
  9. eclipse运行代码后变为红色和绿色
  10. JAVA Swing添加表格
  11. RHCE——控制服务和守护进程
  12. 中国凝油锅炉市场趋势报告、技术动态创新及市场预测
  13. wifidog 配置文件
  14. 微信小程序实现规划路线
  15. cv2.warpAffine( )
  16. 团队开发背景及团队分工
  17. 精致又小巧的3款黑科技软件,一旦使用,难以割舍
  18. MySQL连接报ERROR 2003(HY000) Can‘t connect to MySQL server on ‘xxxIP‘(113)
  19. 说说zookeeper一般都有哪些使用场景?
  20. C语言实现通讯录(使用文件保存信息)

热门文章

  1. python 按照要求对字符串进行处理
  2. 云服务器怎么设置数据库文件,怎么设置云服务器数据库
  3. zbb20170824 oracle expdp/impdp 导入导出数据
  4. Codeforces 813B The Golden Age(数学+枚举)
  5. itoa函数的递归实现(二级指针实现)
  6. 【狼】unity3d point light 个数限制更改
  7. Asp.NET MVC3添加域(Areas)区分Admin域和用户域
  8. 开源WebGIS实施方案(一):开篇 [转]
  9. React Native Android启动白屏的一种解决方案下
  10. CSS垂直居中解决方案