一个指针空间问题

来源:百度知道 编辑:UC知道 时间:2024/07/04 12:03:29
char str[]="hello";
char *p=char;
int n=10;
sizeof(str)=6;//这个我知道为什么
sizeof(p)=4;//为什么?
sizeof(n)=4;//不是两个字节吗?

//还有
void func(char str[100])
{
sizeof(str)=4;//为什么?
}
void *p=malloc(100);
sizeof(p)=4;//为什么?不懂!

sizeof(p)为 char的指针大小
sizeof(n) 在win32中是32位所以为4个字节

void func(char str[100])
这里的一个指针空间问题
悬赏分:10 - 离问题结束还有 14 天 23 小时
char str[]=\"hello\";
char *p=char;
int n=10;
sizeof(str)=6;//这个我知道为什么
sizeof(p)=4;//为什么?
sizeof(n)=4;//不是两个字节吗?

//还有
void func(char str[100])
这里的sizeof(str)为char 指针大小
void*是一个无类型指针
sizeof是一个编译时计算的关键字,所以结果都是常量

char *p=char是把char赋给p,所以sizeof(p)=4
后面那个程序本来是
void func(char str[100])
{
sizeof(str)=4;
}
void *p=malloc(100);
还是
void func(char str[100])
{
sizeof(str);
}
void *p=malloc(100);
的???

在32位计算机上,编译器用一个32位的整数来表示指针的大小,所以一般对指针求sizeof()其结果是4个字节。
整型变量在过去16位机器上是2个字节,在现在的32位机器上一般都是4个字节(具体与编译器有关)。标准从来就没有定义它的具体大小,只是规定,long long必须不小于long型,long型必须不小于int型。