GLORY | 学习·记录

coding for life

C语言声明的神器解码环

今天看到有位童鞋在TopLanguage上面提了个问题:
int a[][3]={1,2,3,4,5,6};
int (*b)[3]=a;

不用编译器,说说b里是什么?

其实这种问题在《C专家编程》的P65中的神器解码环中有很详尽的解释。
在这里首先考察等式左边的int (*b)[3]

1.最左边的标识符是b 表示b是...
2.b的左边是*
表明b是指向...的指针
3.*的左边是左括号
左括号把已经处理的部分声明组合在一起,知道遇见相应的右括号
4.(*b)左边是方括号
表示大小为3的数组
5.剩下的符号形成基本类型int
表明b是一个指针,它指向一个大小为3的int型数组。

而把a的值赋给b,表明是将b指向a。

之后sagasw给出一个demo,可以更清楚的了解指针相关各种。
int main(int argc, char* argv[])
{

    
int a[][3]={1,2,3,4,5,6};
    
int (*b)[3]=a;   
    printf(
"a %p b %p \n", a, b);

    
++b;
    printf(
"a1 %p a10 %p a11 %p b %p \n", a[1], &a[1][0], &a[1][1], b);

    
++b;
    printf(
"a %p b %p \n", a[2], b);
    
return 0;

}

posted on 2010-06-09 23:09 meglory 阅读(190) 评论(0)  编辑 收藏 引用 所属分类: C/C++


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

随笔分类

随笔档案

最新评论