f*******y 发帖数: 139 | 1 记得定义的时候是不分配空间的,除非是static或全局。要用malloc分配。
C好像是这样,C++呢? | g*****g 发帖数: 34805 | 2 又不知道数组多大,怎么分配空间呢。就是分配一个指针罢了。
【在 f*******y 的大作中提到】 : 记得定义的时候是不分配空间的,除非是static或全局。要用malloc分配。 : C好像是这样,C++呢?
| f*******y 发帖数: 139 | 3 这样定义
main()
{
int a[40];
....
}
a 分配空间了么?
【在 g*****g 的大作中提到】 : 又不知道数组多大,怎么分配空间呢。就是分配一个指针罢了。
| g*********e 发帖数: 42 | | g*********e 发帖数: 42 | 5 不过以前看一牛人说过,好像分配不分配操作系统说了算。 | b**g 发帖数: 335 | 6 没有...因为a不是全局
所以a是分配在stack上,要run-time时才会出现
不过现在即使是全局,也多半是在run-time才分配,类似copy-on-write的
【在 f*******y 的大作中提到】 : 这样定义 : main() : { : int a[40]; : .... : } : a 分配空间了么?
| f*******y 发帖数: 139 | 7 我记得以前用C的时候,数组要定义成全局或静态,或用malloc,否则内存有可能出错。
但现在用VS2003, C++,定义了一个数组,感觉是在run-time 分配了空间的。
另外不是run-tiime的难道是分配在heap上么?
【在 b**g 的大作中提到】 : 没有...因为a不是全局 : 所以a是分配在stack上,要run-time时才会出现 : 不过现在即使是全局,也多半是在run-time才分配,类似copy-on-write的
| d*******n 发帖数: 524 | 8 //test.cpp
#include
using namespace std;
int main() {
int a[5] = {11, 22, 33, 44, 55};
int b[5];
int c[5];
int d[5] = {1, 2, 3, 4, 5};
cout << "&a =\t" << (long)&a << endl
<< "&b =\t" << (long)&b << endl
<< "&c =\t" << (long)&c << endl
<< "&d =\t" << (long)&d << endl;
}
$ ./a.out
&a = 140733237530704
&b = 140733237530672
&c = 140733237530640
&d = 140733237530608
【在 f*******y 的大作中提到】 : 这样定义 : main() : { : int a[40]; : .... : } : a 分配空间了么?
| d*******n 发帖数: 524 | 9 That's how Java deals with array.
In C++, compiler does allocate memory when you define an array.
Thinking in C++ talks about this.
【在 g*****g 的大作中提到】 : 又不知道数组多大,怎么分配空间呢。就是分配一个指针罢了。
| m**a 发帖数: 46 | 10 using namespace std;
int main() {
int a[5] = {11, 22, 33, 44, 55};
int b[5];
int c[5];
int d[5] = {1, 2, 3, 4, 5};
cout << "&a =\t" << (long)&a << endl
<< "&b =\t" << (long)&b << endl
<< "&c =\t" << (long)&c << endl
<< "&d =\t" << (long)&d << endl;
}
$ ./a.out
&a = 140733237530704
&b = 140733237530672
&c = 140733237530640
&d = 140733237530608
is this correct? a,b,c,d are pointers already, what will we get from &a, &b,
&c, and &d? maybe you should use (long)&a[0] instead of (long)&a. | t****t 发帖数: 6806 | 11 go ahead and read this chapter:
http://c-faq.com/aryptr/index.html
to summarize, array is NOT equivalent to pointer.
【在 m**a 的大作中提到】 : using namespace std; : int main() { : int a[5] = {11, 22, 33, 44, 55}; : int b[5]; : int c[5]; : int d[5] = {1, 2, 3, 4, 5}; : cout << "&a =\t" << (long)&a << endl : << "&b =\t" << (long)&b << endl : << "&c =\t" << (long)&c << endl : << "&d =\t" << (long)&d << endl;
| d*******n 发帖数: 524 | 12 Is this for me or mana?
【在 t****t 的大作中提到】 : go ahead and read this chapter: : http://c-faq.com/aryptr/index.html : to summarize, array is NOT equivalent to pointer.
| t****t 发帖数: 6806 | 13 for mana, of course!
【在 d*******n 的大作中提到】 : Is this for me or mana?
| O*******d 发帖数: 20343 | 14 分配了。空间是sizeof(a);
【在 f*******y 的大作中提到】 : 这样定义 : main() : { : int a[40]; : .... : } : a 分配空间了么?
|
|