注册 登录
编程论坛 C++教室

C++里动态数组与指针的问题

sy_141618 发布于 2007-07-07 13:42, 1454 次点击

1 string *psa=new string[10];
2 cin >> *psa;
3 cout << *psa;

Q1 书上说动态分配的优点是能在运行时决定数组大小,但1是书上第1个例子的1句话,23是我加上去的,运行仍然通过,那这个[10]是什么意思呢? 作业要你处理可变长的输入到一个字符数组,所以我就这样写了。

Q2 while(cin >> *psa) 到底在输入什么字符的情况下循环才会退出?我输入\0没反应。。

Q3 int *pia2=new int[10]();
书上说()就是初始化,对于这个内置函数来说就等于初始化为0了
但是cout << *pia2;后输出3998880


[此贴子已经被作者于2007-7-7 13:44:27编辑过]

18 回复
#2
maoguoqing2007-07-07 13:48
10表示有10个这样的string

F6可以退出
#3
sy_1416182007-07-07 13:58
我是想退出循环继续下面代码,类似判断这样的意思,就是输入的只能是字母和数字吧~不好意思,前面没把限制说清楚。
#4
sy_1416182007-07-07 14:01

1 string *psa=new string[10];
2 *psa="1234567890123"
3 cout << *psa;

分配了10个大小的STRING,但是为什么我这样编写代码,编译运行都能正常通过呀?那这个10还有什么用?

#5
maoguoqing2007-07-07 14:17
以下是引用sy_141618在2007-7-7 13:58:20的发言:
我是想退出循环继续下面代码,类似判断这样的意思,就是输入的只能是字母和数字吧~不好意思,前面没把限制说清楚。

F6同样可以帮你达到这样的功能。

#6
maoguoqing2007-07-07 14:17
以下是引用sy_141618在2007-7-7 14:01:16的发言:

1 string *psa=new string[10];
2 *psa="1234567890123"
3 cout << *psa;

分配了10个大小的STRING,但是为什么我这样编写代码,编译运行都能正常通过呀?那这个10还有什么用?

这个时候*psa等同于string[0],自然正确。。

#7
sy_1416182007-07-07 14:35

string *psa=new string[0];
*psa="fsdafasdfafda";
产生运行时错误。。。
但是把0改成1就可以了~
书上说“[0]是合法的,但是不能进行任何解引用操作,因为它毕竟没有指向任何元素。”

果然哦。哈。。F6可以退出循环。。怎么实现当输入的是数字就退出循环呢?

#8
maoguoqing2007-07-07 14:38
以下是引用sy_141618在2007-7-7 14:35:01的发言:

string *psa=new string[0];
*psa="fsdafasdfafda";
产生运行时错误。。。
但是把0改成1就可以了~
书上说“[0]是合法的,但是不能进行任何解引用操作,因为它毕竟没有指向任何元素。”

果然哦。哈。。F6可以退出循环。。怎么实现当输入的是数字就退出循环呢?

汗,0当然会错,因为这个字符串数组中元素个数为0,编译合法,运行会错(即不可以对它进行操作)
要想输入数字就退出,那就自己判断吧

#9
天空の城2007-07-07 14:42

因为这个字符串数组中元素个数为0,编译合法

编译不合法,不能给0,int a[0]编译回出错.

#10
maoguoqing2007-07-07 15:01
以下是引用天空の城在2007-7-7 14:42:34的发言:

因为这个字符串数组中元素个数为0,编译合法

编译不合法,不能给0,int a[0]编译回出错.

你这是静态数组,当然不合法,用new 生成的动态数组就可以为0

#11
sy_1416182007-07-07 16:20

编译没错~~运行错误,因为没有对象~~
想要不是输入字母就退出这判断怎么做啊??不会~~

#12
huawang992007-07-07 16:29
#include <iostream.h>
int main()
{
int *psa=new int (10);
cin >> *psa;
cout << *psa;
return 0;
}

这样就可以了,哈哈
#13
sy_1416182007-07-07 16:41
对啊对啊。。我也知道这样可以。。那10到底是什么呢?
又来个问题,(10)和[10]一样?
#14
maoguoqing2007-07-07 16:55
以下是引用huawang99在2007-7-7 16:29:45的发言:
#include <iostream.h>
int main()
{
int *psa=new int (10);
cin >> *psa;
cout << *psa;
return 0;
}

这样就可以了,哈哈

这个10表示psa指向的整数的值是10,()和[]是完全不一样的。

#15
aipb20072007-07-07 17:51
动态数组允许你数组的大小在运行时确定,当然你用常量也对。

你可以把10换成个变量,在运行时给变量一个值。
这就是“动态”啊!
#16
sy_1416182007-07-07 18:07
回复:(aipb2007)动态数组允许你数组的大小在运行时...

我的意思是 就算我设成10了 我放进去15个字符外加结束符 正常打印也能全部打出来啊~ 那后面的[10]什么用啊

#17
maoguoqing2007-07-07 18:16
以下是引用sy_141618在2007-7-7 18:07:49的发言:

我的意思是 就算我设成10了 我放进去15个字符外加结束符 正常打印也能全部打出来啊~ 那后面的[10]什么用啊

更你说了那个10不是字符个数,是数组元素的个数,
你那样放15个字符相当于放在了b[0]中,后面b[1]..b[9]为空的。。

#18
sy_1416182007-07-07 18:25
啊!!!!原来是这样!!!!你好厉害啊!!!你第1个回复我就没看懂!!!终于知道啦~~KKK 谢谢!
#19
乙丑子2007-07-09 20:57

1