sizeof()的试题

来源:百度知道 编辑:UC知道 时间:2024/06/24 18:26:32
在字长为32位的PC机的0S上,执行下列main函数后的输出如何?
void MyPrint (char p[10]) {
printf(“% d\n”, sizeof(p) );//答案:
return;
}
int main (void) {
char p1[10];
char p2[]=”12345”;
char *p3=”12345”;
printf(“% d\n”, sizeof(p1)); //答案:
printf(“% d\n”, sizeof(p2)); //答案:
printf(“% d\n”, sizeof(p3)); //答案:
MyPrint(p1);
return 0;
}
请给出答案并说下理由,THS

printf(“% d\n”, sizeof(p1)); //答案: 10,因为p1是个10个字符数组,因此sizeof(p1) = 10

printf(“% d\n”, sizeof(p2)); //答案: 6,因为p2为字符串“12345”,p2的大小就为数组的大小,字符串结束符\0也算一个字符,因此sizeof(p2) = 6

printf(“% d\n”, sizeof(p3)); //答案: 4,因为p3为一个指向字符串“12345”的地址,地址的大小为4个字节,因此sizeof(p3) = 4

10 // 数组长度 * sizeof(char) --printf(“% d\n”, sizeof(p1));
6 // 字符串有\0 --printf(“% d\n”, sizeof(p2));
4 // 指针大小 --printf(“% d\n”, sizeof(p3));
4 // 数组做参数传递后,在函数内转换为指针--MyPrint(p1);