int *p=new int[20];
对于new出来的:-) 数组来说,我知道指针 p是指向(数组【20】)的;问题出来了
1. 指针p 的内存地址和(数组【20】)内存地址是不是一样的,(我认为是不一样的!)
2.如果1.的我的推论正确,那么我想得到(数组【20】)的首地址应该怎么得到?
(学习sizeof时候的一个疑惑,因为sizeof(p)=4而已,得不到数组大小)
[解决办法]
楼主,你知道指针的值(就是指针所指向的内存的地址)和指针自己的地址2个意思么
cout < < (int)p < < (int)&p;
[解决办法]
1. 指针p 的内存地址(&p)的确和数组的地址不一样,但是那个里面存的值(p)是数组的首地址。一个变量的地址和值是不一样的,一定要区分清楚,尤其是指针变量。指针变量的地址(&指针变量名)、指针变量的值(指针变量名)。
2. p的值就是数组的首地址。
sizeof(p)测到的是p指针的大小,即4个字节.你想看到p指向的空间多大,是不行的。
给你举个例子:
int a[20];
int* pa=a;
sizeof(a)= 80 sizeof(pa)=4
[解决办法]
“在定义数组的时候编译器会在正常数组空间的前面加上一个空间,用于存放数组元素的个数。”只有堆上分配的才可能会有吧……
[解决办法]
cout < <p < <endl; 输出数组的首地址;
int a = 3;
int *p = &a;
p 也是一 个变量(指向整形的指针),
a 也是一 个变量(整形)
a 的内容是3
p 的内容是 a 的地址
[解决办法]
1. 指针p 的内存地址和(数组【20】)内存地址是不是一样的,(我认为是不一样的!)
2.如果1.的我的推论正确,那么我想得到(数组【20】)的首地址应该怎么得到?
////////////////////////////////////////////////////////////////////////////
一、指针p和数组的内存地址不同的,因为指针有自己的内存地址,指针是一个变量,一个特殊的变量,和其他变量一下,有自己的内存地址
二、指针是一个特殊的变量,这个变量是存放其他变量的内存地址,所以 int * p = new int[20]
先是声明一个指针,为这个指针分配了20个int的内存空间,因为数组在内存的空间是连续的,所以得到数组首地址,就能得到整个数组,而指针p这个变量里则是存放数组在内存中的首地址
呵呵,第一次回复这样基础性的东东,请大家拍砖时,不要下手太重