zhangcao2017
zhangcao2017
采纳率100%
2017-11-29 00:43 阅读 1.1k
已采纳

C语言遇到问题,请大神相助!指针型数组里元素所占用字节问题!

 #include <stdio.h>

int main(void)
{
    int  i;
    char a[][5] = {"LISP", "C", "Ada"};
    char *p[]   = {"PAUL", "X", "MAC"};

    for (i = 0; i < 3; i++)
        printf("a[%d] = \"%s\"\n", i, a[i]);

    for (i = 0; i < 3; i++){
        printf("p[%d] = \"%s\"\n", i, p[i]);
        printf("p[%d]占用%d字节\n", i, sizeof(p[i]));

    };
    printf("p占用%d字节\n", sizeof(p));

    return 0;
}

代码如上,我理解p[0]所占用的字节是4,p[1]所占用的字节是1,p[2]所占用的字节是3.

但是,实际情况是这样的,如下图所示

图片说明

想请问高手,这是为什么?谢谢!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

8条回答 默认 最新

  • 已采纳
    swimming_in_IT_ swimming_in_it_ 2017-11-29 00:56

    char *p[] = {"PAUL", "X", "MAC"};这句话是声明了一个指针变量的数组,p[0],p[1],p[2]在这里都是指针变量,而指针变量都是占4个字节的内存。你
    说的p[0]所占用的字节是4,p[1]所占用的字节是1,这是指针变量指向的内存地址存储的数据的占用内存。不明白,先去百度下,指针和变量的区别吧。

    点赞 1 评论 复制链接分享
  • kunterxlp 长空非鹰 2017-11-29 01:02

    p[0]、p[1]、p[2]都是指针,不管什么类型的指针都是占用4个字节。

    点赞 1 评论 复制链接分享
  • qq_34547022 小牛宝 2017-11-29 01:27

    那你肯定对指针不了解了,内存是一块块连成一片有序编好号的房子,当然他们的大小是一致的。指针就是获取这个房子的编号,获取指针的大小是没有意义的,因为全部都是一样的

    点赞 1 评论 复制链接分享
  • u010184844 叨叨啊 2017-11-29 01:37

    你所理解的是指针里面数据占用的空间大小,而你打印的却是指针所占用的空间大小。指针不管什么类型都是4个字节,因为不管什么类型的指针,他存的都是他指向的内存数据的地址,这个地址你可以看成身份证编号,他是唯一的。如果你想打印这个指针指向的数据的大小,应该这样打印:
    printf("p[%d]占用%d字节\n", i, sizeof(*p[i]));

    点赞 1 评论 复制链接分享
  • qtvbivg qtvbivg 2017-11-29 01:45

    指针变量规定占用四个字节,而且说这样子输出字节好像没啥用

    点赞 1 评论 复制链接分享
  • qtvbivg qtvbivg 2017-11-29 01:47

    指针变量规定占用四个字节,而且说这样子输出字节好像没啥用

    点赞 1 评论 复制链接分享
  • m18359719449 m18359719449 2017-11-29 02:05

    指针的大小都是四个字节,获取指针的大小没有意义

    点赞 1 评论 复制链接分享
  • tjl121314 金羊座 2017-11-29 08:23

    char p[] ,先看变量p,先跟右边结合,说明这个变量是个数组形式的变量,再看左边,说明每个元素是指针,指针的类型为char型,
    每个指针在32位机器上占4个字节

    点赞 1 评论 复制链接分享

相关推荐