鱼C论坛

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

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

[复制链接]
发表于 2020-3-20 20:01:19 | 显示全部楼层 |阅读模式
2鱼币
#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[i]);//ptr[0]=*p+0
    }
    printf("这是int:%lu\n",sizeof(int));
    printf("这是ptr:%lu\n",sizeof(ptr));
    printf("这是&ptr[0]:%lu\n",sizeof(&ptr[0]));
    for (int j=0;j<num;j++) {
        printf("%d ",ptr[j]);
    }
    printf("\n");
    free(ptr);
    ptr=NULL;
    return 0;
}
--------------------------
你想输入多少个数字: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]));这个也是指针的内存空间大小。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

发表于 2020-3-20 20:17:28 | 显示全部楼层
编译器不同吧==我这里是
你想输入多少个数字:3
请输入第1个数字:1
请输入第2个数字:2
请输入第3个数字:3
这是int:4
这是ptr:4
这是&ptr[0]:4
1 2 3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

这两个有共同点吗?你怎么能把这两个联系起来呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

我用的是xcode,但是那也不应该是4啊,动态分配内存大小不是3*int字节的大小吗?
int是4,就应该是12啊
想知道小甲鱼最近在做啥?请访问 -> 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的地址跨度应该是相应的大小啊。。。?
是我哪里理解有问题吗,能不能详细的说一下,谢谢大佬了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

谢谢大佬!搞明白了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-15 20:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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