鱼C论坛

 找回密码
 立即注册
查看: 1345|回复: 6

[已解决]动态数组的问题

[复制链接]
发表于 2020-3-20 20:01:19 | 显示全部楼层 |阅读模式
2鱼币
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main() {
  4.     int *ptr=NULL;
  5.     int num;
  6.     printf("你想输入多少个数字:");
  7.     scanf("%d",&num);
  8.     ptr=(int *)malloc(num*sizeof(int));//这个指针的跨度是num*int
  9.     for(int i=0;i<num;i++)
  10.     {
  11.         printf("请输入第%d个数字:",i+1);
  12.         scanf("%d",&ptr[i]);//ptr[0]=*p+0
  13.     }
  14.     printf("这是int:%lu\n",sizeof(int));
  15.     printf("这是ptr:%lu\n",sizeof(ptr));
  16.     printf("这是&ptr[0]:%lu\n",sizeof(&ptr[0]));
  17.     for (int j=0;j<num;j++) {
  18.         printf("%d ",ptr[j]);
  19.     }
  20.     printf("\n");
  21.     free(ptr);
  22.     ptr=NULL;
  23.     return 0;
  24. }
复制代码

--------------------------
你想输入多少个数字:3
请输入第1个数字:1
请输入第2个数字:2
请输入第3个数字:3
这是int:4
这是ptr:8
这是&ptr[0]:8
1 2 3
--------------------------
我输入了3个数字那么动态分配的内存不应该是3*4(int)=12吗?
为什么ptr是8个字节?
最佳答案
2020-3-20 20:01:20
你的系统里面,指针占用了8个字节。
printf("这是ptr:%lu\n",sizeof(ptr)); 是指针变量的内存空间大小,不是数组的内存空间大小。
printf("这是&ptr[0]:%lu\n",sizeof(&ptr[0]));这个也是指针的内存空间大小。

最佳答案

查看完整内容

你的系统里面,指针占用了8个字节。 printf("这是ptr:%lu\n",sizeof(ptr)); 是指针变量的内存空间大小,不是数组的内存空间大小。 printf("这是&ptr[0]:%lu\n",sizeof(&ptr[0]));这个也是指针的内存空间大小。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-3-20 20:01:20 | 显示全部楼层    本楼为最佳答案   
你的系统里面,指针占用了8个字节。
printf("这是ptr:%lu\n",sizeof(ptr)); 是指针变量的内存空间大小,不是数组的内存空间大小。
printf("这是&ptr[0]:%lu\n",sizeof(&ptr[0]));这个也是指针的内存空间大小。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-3-20 20:17:28 | 显示全部楼层
编译器不同吧==我这里是
  1. 你想输入多少个数字:3
  2. 请输入第1个数字:1
  3. 请输入第2个数字:2
  4. 请输入第3个数字:3
  5. 这是int:4
  6. 这是ptr:4
  7. 这是&ptr[0]:4
  8. 1 2 3
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-3-20 20:24:17 | 显示全部楼层
3*4(int)=12
ptr是8个字节

这两个有共同点吗?你怎么能把这两个联系起来呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-20 20:25:09 | 显示全部楼层
墨羽岚 发表于 2020-3-20 20:17
编译器不同吧==我这里是

我用的是xcode,但是那也不应该是4啊,动态分配内存大小不是3*int字节的大小吗?
int是4,就应该是12啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-20 20:31:35 | 显示全部楼层
人造人 发表于 2020-3-20 20:24
3*4(int)=12
ptr是8个字节

第八行ptr=(int *)malloc(num*sizeof(int));
这不是说我开辟了一个内存为num*sizeof(int)大小的内存空间吗?
所以我觉得ptr的地址跨度应该是相应的大小啊。。。?
是我哪里理解有问题吗,能不能详细的说一下,谢谢大佬了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-20 20:53:07 | 显示全部楼层
alexw_h264 发表于 2020-3-20 20:44
你的系统里面,指针占用了8个字节。
printf("这是ptr:%lu\n",sizeof(ptr)); 是指针变量的内存空间大小,不 ...

谢谢大佬!搞明白了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-4 15:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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