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