动态数组的问题
#include <stdio.h>#include <stdlib.h>
int main() {
int *ptr=NULL;
int num;
printf("你想输入多少个数字:");
scanf("%d",&num);
ptr=(int *)malloc(num*sizeof(int));//这个指针的跨度是num*int
for(int i=0;i<num;i++)
{
printf("请输入第%d个数字:",i+1);
scanf("%d",&ptr);//ptr=*p+0
}
printf("这是int:%lu\n",sizeof(int));
printf("这是ptr:%lu\n",sizeof(ptr));
printf("这是&ptr:%lu\n",sizeof(&ptr));
for (int j=0;j<num;j++) {
printf("%d ",ptr);
}
printf("\n");
free(ptr);
ptr=NULL;
return 0;
}
--------------------------
你想输入多少个数字:3
请输入第1个数字:1
请输入第2个数字:2
请输入第3个数字:3
这是int:4
这是ptr:8
这是&ptr:8
1 2 3
--------------------------
我输入了3个数字那么动态分配的内存不应该是3*4(int)=12吗?
为什么ptr是8个字节?
你的系统里面,指针占用了8个字节。
printf("这是ptr:%lu\n",sizeof(ptr)); 是指针变量的内存空间大小,不是数组的内存空间大小。
printf("这是&ptr:%lu\n",sizeof(&ptr));这个也是指针的内存空间大小。 编译器不同吧==我这里是
你想输入多少个数字:3
请输入第1个数字:1
请输入第2个数字:2
请输入第3个数字:3
这是int:4
这是ptr:4
这是&ptr:4
1 2 3 3*4(int)=12
ptr是8个字节
这两个有共同点吗?你怎么能把这两个联系起来呢?
墨羽岚 发表于 2020-3-20 20:17
编译器不同吧==我这里是
我用的是xcode,但是那也不应该是4啊,动态分配内存大小不是3*int字节的大小吗?
int是4,就应该是12啊 人造人 发表于 2020-3-20 20:24
3*4(int)=12
ptr是8个字节
第八行ptr=(int *)malloc(num*sizeof(int));
这不是说我开辟了一个内存为num*sizeof(int)大小的内存空间吗?
所以我觉得ptr的地址跨度应该是相应的大小啊。。。?
是我哪里理解有问题吗,能不能详细的说一下,谢谢大佬了 alexw_h264 发表于 2020-3-20 20:44
你的系统里面,指针占用了8个字节。
printf("这是ptr:%lu\n",sizeof(ptr)); 是指针变量的内存空间大小,不 ...
谢谢大佬!搞明白了{:5_106:}
页:
[1]