鱼C论坛

 找回密码
 立即注册
查看: 1783|回复: 4

[已解决]小甲鱼SE30动态内存问题.求指教

[复制链接]
发表于 2021-1-7 20:13:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
        int *ptr=NULL;
        int num,i;
        printf("请输入录入的整数:");
        scanf("%d",&num);
       
        ptr =(int*)malloc(num*sizeof(int));
       
        for (i=0;i<num;i++)
        {
                printf("请录入第%d个整数:",i+1);
                scanf("%d",&ptr[i]);      //这一行&ptr[i],为什么ptr前面还要写&取地址符..........
         }
        printf("你录入的整数是:");
        for (i=0;i<num;i++)
        {
                printf("%d",ptr[i]);//这一行为什么ptr[i]前面不加取地址符&........
        }
        putchar('\n');
        free(ptr);
        return 0;
       
}
最佳答案
2021-1-7 20:26:37
      道理很简单,ptr[i] 是一个整数,如果要通过 scanf() 把键盘输入的整数存入 ptr[i],就必须以 ptr[i] 的内存地址 & ptr[i] 为参数;如果用 printf() 显示变量 p[i] 的内容,必须要以变量 p[i] 本身为参数。这些都是固定的要求,必须这样做,不要问为什么,只要记住就好。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-7 20:26:37 | 显示全部楼层    本楼为最佳答案   
      道理很简单,ptr[i] 是一个整数,如果要通过 scanf() 把键盘输入的整数存入 ptr[i],就必须以 ptr[i] 的内存地址 & ptr[i] 为参数;如果用 printf() 显示变量 p[i] 的内容,必须要以变量 p[i] 本身为参数。这些都是固定的要求,必须这样做,不要问为什么,只要记住就好。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-7 20:47:02 | 显示全部楼层
请输入录入的整数:1
请录入第1个整数:11223344556
你录入的整数是:-1661557332


--------------------------------
Process exited after 7.63 seconds with return value 0
请按任意键继续. . .
为什么我输入数字1....由下面代码向内存申请的动态内存
应该是  4 个字节 int类型的空间吗.. 为什么我输入10个数字没问题
输入11个.就会数据异常....不应该只能输入最多4个字节吗....求解答??
ptr =(int*)malloc(num*sizeof(int));
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-7 21:18:05 | 显示全部楼层
zyj1214 发表于 2021-1-7 20:47
请输入录入的整数:1
请录入第1个整数:11223344556
你录入的整数是:-1661557332


       不要说10个,就是输入 100 个都没有问题,你的这个应该是所有数据连续输出,中间没有分隔,所有数字粘在了一起,试试这个代码吧。
#include<stdio.h>
#include<stdlib.h>

int main(void)
{
        int * ptr = NULL                                    ;
        int num , i                                         ;
        printf("请输入录入的整数:")                        ;
        scanf("%d", & num)                                  ;
       
        ptr =(int *)malloc(num * sizeof(int))               ;
       
        for (i = 0 ; i < num ; i ++) {
                printf("请录入第 %d 个整数:" , i + 1)      ;
                scanf("%d" , & ptr[i])                      ;
        }
        printf("你录入的整数是:\n")                         ;
        printf("%5d" , ptr[0])                              ;
        for(i = 1 ; i < num ; i ++) {
                if(i % 10) printf(" ")                      ;
                else printf("\n")                           ;
                printf("%5d" , ptr[i])                      ;
        } 
        printf("\n")                                        ;
        free(ptr)                                           ;
        return 0                                            ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-7 23:57:36 | 显示全部楼层
本帖最后由 今天吃炒饭 于 2021-1-7 23:58 编辑

111223344556的问题是数据溢出的缘故。c++为例,c++中int的取值范围是-2147483648 ~ 2147483647 ,也就是超出取值范围c++作出了转换,数据溢出的转换百度就有。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-10 11:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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