小甲鱼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;
} 道理很简单,ptr 是一个整数,如果要通过 scanf() 把键盘输入的整数存入 ptr,就必须以 ptr 的内存地址 & ptr 为参数;如果用 printf() 显示变量 p 的内容,必须要以变量 p 本身为参数。这些都是固定的要求,必须这样做,不要问为什么,只要记住就好。 请输入录入的整数: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)); 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:58 编辑
111223344556的问题是数据溢出的缘故。c++为例,c++中int的取值范围是-2147483648 ~ 2147483647 ,也就是超出取值范围c++作出了转换,数据溢出的转换百度就有。
页:
[1]