zyj1214 发表于 2021-1-7 20:13:59

小甲鱼SE30动态内存问题.求指教

#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);      //这一行&ptr,为什么ptr前面还要写&取地址符..........
       }
        printf("你录入的整数是:");
        for (i=0;i<num;i++)
        {
                printf("%d",ptr);//这一行为什么ptr前面不加取地址符&........
        }
        putchar('\n');
        free(ptr);
        return 0;
       
}

jackz007 发表于 2021-1-7 20:26:37

      道理很简单,ptr 是一个整数,如果要通过 scanf() 把键盘输入的整数存入 ptr,就必须以 ptr 的内存地址 & ptr 为参数;如果用 printf() 显示变量 p 的内容,必须要以变量 p 本身为参数。这些都是固定的要求,必须这样做,不要问为什么,只要记住就好。

zyj1214 发表于 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));

jackz007 发表于 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)                      ;
      }
      printf("你录入的整数是:\n")                         ;
      printf("%5d" , ptr)                              ;
      for(i = 1 ; i < num ; i ++) {
                if(i % 10) printf(" ")                      ;
                else printf("\n")                           ;
                printf("%5d" , ptr)                      ;
      }
      printf("\n")                                        ;
      free(ptr)                                           ;
      return 0                                          ;
}

今天吃炒饭 发表于 2021-1-7 23:57:36

本帖最后由 今天吃炒饭 于 2021-1-7 23:58 编辑

111223344556的问题是数据溢出的缘故。c++为例,c++中int的取值范围是-2147483648 ~ 2147483647 ,也就是超出取值范围c++作出了转换,数据溢出的转换百度就有。
页: [1]
查看完整版本: 小甲鱼SE30动态内存问题.求指教