LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 710|回复: 8

简单的指针问题_B

[复制链接]
发表于 2004-10-17 14:29:49 | 显示全部楼层 |阅读模式

  1.   char *name=new char[];
  2.   cin>>name;
  3.   cout<<name;
复制代码

假设用户输入fbuilder
那么输出的指针name实际是fbuilder地址,
*name是指针变量,而name是指针,它的内容是某变量的地址,
这样理解错在哪里?

一位朋友说“应该是取出它所在地址的内容”
可我觉得那是在C里的规则。

大家觉得呢?

谢谢。
 楼主| 发表于 2004-10-17 22:23:34 | 显示全部楼层
听别人说的:
char *name=new char[];
这个也是错的,必须指定数组的大小

cin >> name
讲标准输入流中的数据依次存储到你给定的首地址中
 楼主| 发表于 2004-10-18 08:29:08 | 显示全部楼层
最初由 Xiangbuilder 发表
听别人说的:
cin >> name
讲标准输入流中的数据依次存储到你给定的首地址中


这个是不是只用于char类型的数据?
下面程序就不行:

  1.   char *int=new int [8];
  2.   cin>>name;
  3.   cout<<name;
复制代码

为什么?
发表于 2004-10-18 11:55:35 | 显示全部楼层
仔细看看编译器给出的提示,那就是为什么不行的原因。
发表于 2004-10-18 12:37:19 | 显示全部楼层
hoho,第一次见到501斑斑,问声好~~~
以后还要向侬请教N多问题哈~~~    ^^
 楼主| 发表于 2004-10-18 13:19:37 | 显示全部楼层
编译器中说的:
[root@localhost c01]# g++ p6_c.cpp -o p6_c
p6_c.cpp: In function `int main()':
p6_c.cpp:7: error: no match for 'operator>>' in 'std::cin >> i'
操作符>>中规定cin>>i是非法的,
而cin>>char是合法的,
这么理解对吗?

因为

  1.    char *name=new char[8];
  2.    cout<<"please input your name:";
  3.    cin>>name;
  4.    cout<<"hello,"<<name<<endl;
复制代码

是正确的,而

  1.    int *name=new int[8];
  2.    cout<<"please input your name:";
  3.    cin>>name;
  4.    cout<<"hello,"<<name<<endl;
复制代码

是错误的。
下面的是正确的:

  1.    int *name=new int[8];
  2.    cout<<"please input your name:";
  3.    cin>>name[8];
  4.    cout<<"hello,"<<name[8]<<endl;
复制代码

那么为什么编译器只允许char,
而不允许int,允许int[]?

谢谢。
发表于 2004-10-18 16:02:13 | 显示全部楼层
这种做法在C中是可以的,但在C++中是不行的。C++本来就是为了设计大型软件而开发的。为了减少犯错误的可能,对类型的限制要比C语言严格得多。
 楼主| 发表于 2004-10-18 19:21:25 | 显示全部楼层
谢谢。
发表于 2004-10-19 11:58:33 | 显示全部楼层
自己重载一个>>操作符,随便输入什么都可以
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表