C语言中与数组和指针有关的sizeof问题

来源: 作者:articleman
  

C语言中与数组和指针有关的sizeof问题

 

 引自:http://blog.chinaunix.net/u1/35100/showart_271369.html

帮助理解数组与指针的关系

#include <stdio.h>
#include <string.h>

int main (int argc, char** argv)
{
        char as[10];
        char as2[10][20];
        char * ps = as;
        char *pa[10];
        char (*ppa)[10];
        char *pc = "hello";
        char pac[] = "hello";

        /* as与ps是有本质区别的,ps仅仅是一个字符指针,而as则指代由10个char */
        /* 组成的字符数组 */
        printf("sizeof(as)=%d\n", sizeof(as));
        printf("sizeof(ps)=%d\n", sizeof(ps));
      
        /* 同理,as2[0]指代由20个char组成的字符数组 */
        /* as2指代整个二维字符数组 */
        printf("sizeof(as2[0])=%d\n", sizeof(as2[0]));
        printf("sizeof(as2)=%d\n", sizeof(as2));
       
        /* pa是由10个字符指针组成的数组 */
        /* *pa是这个数组中的第一个元素 */
        printf("sizeof(pa)=%d\n", sizeof(pa));
        printf("sizeof(*pa)=%d\n", sizeof(*pa));

        /* ppa是一个指向由10个char组成的数组的指针 */
        /* (*ppa)才是指代整个数组 */
        printf("sizeof(ppa)=%d\n", sizeof(ppa));
        printf("sizeof(*ppa)=%d\n", sizeof(*ppa));
       
        /* pc只是一个字符指针, (*pc)是一个字符 */
        printf("sizeof(pc)=%d\n", sizeof(pc));
        printf("sizeof(*pc)=%d\n", sizeof(*pc));

        /* pac则是一个字符数组, 注意它的大小是6,而不是5,因为后面会自动加一个'\0' */
        printf("sizeof(pac)=%d\n", sizeof(pac));
}

程序的输出结果是:
sizeof(as)=10
sizeof(ps)=4
sizeof(as2[0])=20
sizeof(as2)=200
sizeof(pa)=40
sizeof(*pa)=4
sizeof(ppa)=4
sizeof(*ppa)=10
sizeof(pc)=4
sizeof(*pc)=1
sizeof(pac)=6

 

 


时间:2007-04-06 22:36 来源: 作者:articleman 原文链接

好文,顶一下
(1)
100%
文章真差,踩一下
(0)
0%
------分隔线----------------------------


把开源带在你的身边-精美linux小纪念品
无觅相关文章插件,快速提升流量