易截截图软件、单文件、免安装、纯绿色、仅160KB

解读复杂的C/C++声明[实战篇]

这是入门篇中提到的那两题:
int * (* (*fp1) (int) ) [10];
int *( *( *arr[5])())();
解答如下
1.int * (* (*fp1) (int) ) [10];
从外往内进行分析
a.typedef P=(* (*fp1) (int) ),那么原声明改写为 int*P[10],这是一个有10个元素的数组,每个元素都是一个指向整型数的指针
b.typedef Q=(*fp1),那么P改写为 *Q(int),这是一个函数,该函数有一个int形参,返回值为一个指针。
c.*fp1 这是一个指针
按从下往上进行修饰的方式组合。
这是一个指向函数的指针,该函数有一个int形参,返回值为一个指向10个元素数组的指针。该数组里的每一个元素都是一个指向整形数的指针。
2.int *( *( *arr[5])())()
从外往内进行分析
a.typedef P = ( *( *arr[5])()) ,那么原声明被改写为 int *P () ,这是一个函数,该函数没有形参,返回值为int*
b.typedef Q =  *arr[5],那么P被改写为 *(Q)() ,这是一个函数,该函数没有形参,返回值为一个指针
c.*arr[5],这是一个有着5个元素的数组,每个元素都是一个指针。
按从下往上进行修饰的方式组合。
这是一个有5个元素的数组,每个元素都是一个指向函数的指针,该函数没有形参,有返回值。
它的返回值是一个指向函数的指针,这个函数同样没有形参,返回值为指向整型数的指针。
总结:
拿到这种声明,要一层一层的剥开,就像我上面的a,b,c步骤一样,直到不能再剥为止。
然后从下往上的进行修饰组合。
如c是指针,b是数组,那我们就说这是一个指向数组的指针。
c是数组,b是指针,那我们就说这个数组里的每个元素都是指针
要想提高解析的速度,下面几个基本声明要牢记于心,做到第一反应
int *a[10]       一个有着10个元素的数组,每个元素都是一个指向整形数的指针  sizeof(a)=sizeof(int)*10=40
int (*a)[10]    一个指向有10个整型数数组的指针 sizeof(a)=4
int (*a)(int)    一个指向函数的指针,该函数有一个整型参数并返回一个整数 sizeof(a)=4


相关文档:

ARM 标准C/C++ 运行时库


1.
运行时库的路径
指定方式:
(1)      
连接选项
–libpath
(2)      
环境变量
ARMLIB
优先级:
      
libpath
高于
ARMLIB
被指定的路径:
      
包含
a ......

高水平C程序员修养

在大型C语言项目工程或者linux内核中我们都会经常见到两个FASTCALL和armlinkage
两个标识符(修饰符),那么它们各有什么不同呢?今天就给大家共同分享一下自己的心得.
     大家都知道在标准C系中函数的形参在实际传入参数的时候会涉及到参数存放的问题,那么这些参数存放在哪里呢? 有一定理论基础的 ......

C/C++试题

1、bool、float、指针变量与"零值"比较的if语句?
答:
bool flag;   if(flag),if(!flag)
char *p;   if(p==NULL),if(p!=NULL)
float x;  
const float EPSILON = 1e-6;
if((x>=-EPSILON)&&(x<=EPSILON)) //(-0.000001~0.000001)
if((x<-EPSILON)&& ......

c/c++程序的内存分配 [转]

题记:
所有的完美,都是在崩溃的一刻达到的!
我一直回避程序的内存管理,因为爱之愈深,恨之愈烈。但是,还是由很多的朋友一直在体这方面的问题,所以就索性把它坦白了,也许对你我都是一件好事情。
首先,需要搞清楚:变量的类型和它的存储类别是两个概念。
数据类型和内存管理没有直接的关系。
一个由c/C++编 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号