加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

指针算术的奇怪结果

发布时间:2020-12-16 09:50:54 所属栏目:百科 来源:网络整理
导读:我编写了以下程序来理解指针算法.第二个输出看起来很奇怪,因为指针’cp’被声明为一个const char **.没有任何转换我会期望它增加’1’当我做(cp 1)而不是’8′,如输出所示. #include stdio.htypedef const char uint8_t;const char *c = "hello";const char
我编写了以下程序来理解指针算法.第二个输出看起来很奇怪,因为指针’cp’被声明为一个const char **.没有任何转换我会期望它增加’1’当我做(cp 1)而不是’8′,如输出所示.

#include <stdio.h>

typedef const char uint8_t;

const char *c = "hello";
const char **cp = &c;
const char ***cpp = &cp;
const char ****cppp = &cpp;

int main() {

        printf(" cp     %p     (cp + 1)   %p n",(int*)cp,((int*)cp)+1 );
        printf(" cp     %p     (cp + 1)   %p n",cp,(cp + 1));
        printf(" cp     %p     (cp + 1)   %p n",(uint8_t*)cp,((uint8_t*)cp) + 1);

        return 0;
}


 cp     0x601020     (cp + 1)   0x601024 
 cp     0x601020     (cp + 1)   0x601028 
 cp     0x601020     (cp + 1)   0x601021

解决方法

Without any casting I would expect [const char **] to increment by ‘1’ when I do (cp + 1) instead of ‘8’ as the output shows.

否 – 指向指针的指针将增加指针的大小,指针在系统上为8.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读