多级指针运算

原创 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的首地址

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

多级指针运算

今天看到一道题目,研究了好一会儿终于高明白了,在这里拿出来和大家分享一下: 大家可以先行计算一下。 #include char *c[] = { "ENTER", "NEW", "POINT",...
  • nopoppy
  • nopoppy
  • 2016年10月02日 20:34
  • 61

c语言之多级指针的应用

/* 功能: 1、把指针数组p1的字符串取出来, 2、把二维数组buf2的字符取出来, 3、上面的字符串放在 p3,p3 是在堆区指针数组(每个元素同时...
  • lixiaogang_theanswer
  • lixiaogang_theanswer
  • 2017年04月14日 22:42
  • 221

C/C++中指针,多级指针的理解和应用

理解指针,了解基础的内存
  • qq_33023933
  • qq_33023933
  • 2017年03月10日 09:40
  • 362

指针的算术运算

指针可以加上或减去一个整数。
  • a1037488611
  • a1037488611
  • 2014年05月25日 19:25
  • 1183

【C语言】指针运算—— 算术运算,关系运算

算术运算  是不是对指针的任何运算都是合法的呢?答案是它可以执行某些运算,但并非所有的运算都合法。除了加法运算之外,你还可以对指针执行一些其他运算,但并不是很多。(乘法,除法就不可以)  指针加上一个...
  • weixin_38239856
  • weixin_38239856
  • 2017年04月24日 07:33
  • 471

指针运算——算术运算、关系运算

简单来讲就是: C/C++允许将指针和整数进行相加操作,加1的结果就是等于原来的地址值加上指向对象占用的字节数(如 int*p =(int*)malloc(sizeof(int)*5), p+1 表...
  • u013443618
  • u013443618
  • 2016年03月14日 09:59
  • 843

C语言学习篇-9指针运算、指针与数组

说明:本文主要阐述指针的基本运算及算术运算,指针与数组的关系,指针与字符串的关系。指针运算1.指针的基本运算包括取地址以及取值运算等运算。 单目运算符“&”是取操作对象的地址,“*”是取指针指向的对...
  • fd070910
  • fd070910
  • 2016年06月04日 23:08
  • 656

学习笔记---多维数组及多级指针的使用

多维数组使用 多维数组做函数参数
  • aketoshknight
  • aketoshknight
  • 2017年01月22日 23:28
  • 366

指针变量的运算

指针变量的运算   指针变量可以进行某些运算,但其运算的种类是有限的。 它只能进行赋值运算和部分算术运算及关系运算。 1.指针运算符(1)取地址运算符&   取地址运算符&是单目运算符,其结合性...
  • qq_26525215
  • qq_26525215
  • 2015年08月24日 10:42
  • 1029

C++多级指针的”解引用“

指针是C语言中公认的最为强大的语法要素,但同时也是最难理解的语法要素,它曾给程序员带来了无数麻烦和痛苦,以致于在C语言之后诞生的很多新兴 语言中我们再也难觅指针的身影了。 下面是一个最简单的C语言指针...
  • langb2014
  • langb2014
  • 2015年10月23日 12:49
  • 404
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:多级指针运算
举报原因:
原因补充:

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