多级指针运算

原创 2016年06月01日 12:25:20

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

大家可以先行计算一下。
#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的首地址

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

c语言指针初探 一指针运算与多级指针

一 指针运算 指针与整数xiang

C++多级指针

  • 2014年08月14日 13:53
  • 485B
  • 下载

c/c++多级指针与“多维”数组

早上开了一个小时的指针与数组的关系,虽然还是不是特别清楚,但是搞明白了数组指针和指针数组的关系,如下 1.数组指针是指向一个数组首地址的指针,它实际上也是一种指针类型,类似于函数指针。它声明如: i...

C语言多级指针

先看一个小程序:#include int main() { int i = 10; int * p = &i; int ** q = &p; int *** r = ...

多级指针简析

/* 二级指针: —–>推广到多级指针,(一元函数—>多元函数) * char **p 指针的指针 * char **P 指针的指针的指针 * char ***p 指针的指针的指...

c语言之多级指针理解一

//arry:是指针变量,存储的是pObj变量的内存地址 void GetMallocMemory(char*** arry,int cnt){ //如果arry为null,代表没有这个内存空间,也...

8) 多级结构数据成员指针memberPtr [原创,泛型编程,自由下载转载,需注明出处]

在一些需求中,对结构体/类比较,计算,求和,测试的用例中,其往往是对结构/类中的某一个数据成员/数据成员的某个子成员/数据成员的...某个子成员进行比较,计算,求和,测试,这就对某类算法产生了一个需求...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:多级指针运算
举报原因:
原因补充:

(最多只允许输入30个字)