帮忙找出一个C++小程序的错误

来源:百度知道 编辑:UC知道 时间:2024/06/19 05:43:04
#inlcude<iostream>
int main()
{char *p=new char[50];
cin.get(p,sizeof(p));
cout<<p;
}
输出结果为什么只有字符串的前三个字符,而把char *p=new char[50]改为
char p[50]后就可以了!
请问这两种定义有什么不一样?(详细点说明)

char p[50] 时 sizeof(p) = 50
char *p=new char[50] 时 sizeof(p) = 4
前都为数组,后者为指针
不能对直接定义的指针赋字符串

#include<iostream.h>
int main()
{
char *p=new char[50];

cout<<sizeof(p);
cin.get(p,sizeof(p));

cout<<p;
}
p是一个指针,在windows下,是32位,共4个字节,所以共输入4个字节,去掉字符串尾标志0,是3个字符

关键在于sizeof(?)运算符,
他是运算符不是函数!!!
它是在编译时求值的

如果?是静态数组,值为数组大小
?是指针,值为指针大小

明白了没?