多级指针运算

今天看到一道题目,研究了好一会儿终于高明白了,在这里拿出来和大家分享一下:

大家可以先行计算一下。
#include <stdio.h>

char *c[] = { "ENTER", "NEW", "POINT", "FIRST" };
char **cp[] = { c + 3, c + 2, c + 1, c };
char ***cpp = cp;

int main(void)
{
    printf("%s ", **++cpp);
    printf("%s ", *--*++cpp + 3);
    printf("%s ", *cpp[-2] + 3);
    printf("%s\n", cpp[-1][-1] + 1);
    return 0;
}

那么究竟输出的结果是什么呢?
POINT ER ST EW
不知道小伙伴们有么有做对
接下来就是对答案的分析:

1printf("%s ", **++cpp);//"POINT"

    cpp=cp  cpp的值就是数组cp的首地址,即存储c+3这块空间的地址。
    ++cpp   即cpp自加一,cpp的值为存储c+2这块空间的地址
    **++cpp   即*(c+2),即POINT的首地址


(2printf("%s ", *--*++cpp + 3);//ER

    ++cpp  cpp的值为存储c+1这块空间的地址
    *++cpp  拿到的就是数组cp的成员c+1
    --*++cpp  即--(c+1),数组cp的第三个成员变为c
    *--*++cpp+3*c+3,就是ER的首地址


(3printf("%s ", *cpp[-2] + 3);//ST

    cpp[-2]   即*(cpp-2),cpp的值为存储c+1这块空间的地址(这块空间里的内容被改成了c),结果就是拿到c+3
    *cpp[-2] + 3   即ST的首地址




(4printf("%s\n", cpp[-1][-1] + 1);//EW

    cpp[-1]  即*(cpp-1),cpp的值为存储c+1这块空间的地址(这块空间里的内容被改成了c),结果就是拿到c+2
    cpp[-1][-1]  即*((c+2)-1),拿到NEW的首地址

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/db199410/article/details/51555005
文章标签: c语言 指针
个人分类: C语言
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

多级指针运算

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭