c语言 动态数组 输入输出不一致,问题出在哪?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言 动态数组 输入输出不一致,问题出在哪?相关的知识,希望对你有一定的参考价值。

#include "stdio.h"
#include "malloc.h"
void main()
int num, i;
int * array1 = 0;
int * array2 = 0;

if(array1 == array2)
printf("%s", "array1 == array2\n");
else
printf("%s", "array1 != array2\n");


printf("输入一个整数:\n");
scanf("%d", &num);

// 输入
printf("输入%d个整数:\n", num);
array1 = (int *) calloc(num, sizeof(*array1)); // 动态分配数组
for(i = 0; i < num; i++)
scanf("%d", array1 + i);


printf("再输入%d个整数:\n", num);
array2 = (int *) calloc(num, sizeof(*array2)); // 动态分配数组
for(i = 0; i < num; i++)
scanf("%d", array2 + i);


// 输出
for(i = 0; i < num; i++)
printf("%-4d", *array1 + i);

putchar('\n');

for(i = 0; i < num; i++)
printf("%-4d", *array2 + i);

putchar('\n');

if(array1 == array2)
printf("%s", "array1 == array2\n");
else
printf("%s", "array1 != array2\n");


// 释放
free(array1);
free(array2);

------------------------------------
结果:
array1 == array2
输入一个整数:
5
输入5个整数:
1 2 3 4 5
再输入5个整数:
0 9 8 7 6
1 2 3 4 5
0 1 2 3 4
array1 != array2

array1 = (int *) calloc(num, sizeof(*array1)); 这是明显的错误。num是元素个数不错,而sizeof(*array1)应该是元素所占有的字节数。你的array1声明的是int *型指针,sizeof的()中就应该写int,你写*array1是啥意思?如果array1已经是有效指针那可以,表示其中的内容,而现在array1=0,是无效指针,在后来的编译器下连编译都过不了的!追问

这里确实也有问题,谢谢了!

参考技术A printf("%-4d", *array1 + i);
=》printf("%-4d", *(array1 + i) ); 或者
=》printf("%-4d", array1[i]);

array2同理

array1 == array2 判断的是两个指针 指向的地址是否相同
你是分别用calloc申请空间,两个指针的值当然会不同,即使数组内容相同。追问

int * array1 = 0;

*array1等价于int型,所以这不是问题所在。不过,依然谢谢了。

追答

嗯,修改过回答了。

C语言关于结构体变量为动态数组赋值问题

C语言关于结构体变量为动态数组赋值问题for(x=0;x<num;x++)

printf("学号:%d\n姓名:%s\n班级:%d\n",array[x].Num+M_1,array[x].Name,array[x].Banji);

不知道为什么每次输出的都是循环最后一次的结果,而不会把全部输入的数据进行输出,小白一个,求大神指教,谢谢

参考技术A boy1.name[20]="Zhang ping";此形式不对,name是数组,数组在初始化时可以写成name[20]="Zhang ping";但是定义之后在函数的执行部分中就不能这样写了,可以用字符串拷贝函数,即写成strcpy(boy1.name,"Zhang ping"); c[2]=1,2 错误,要逐个元素赋值。写成e.c[0]=1;e.c[1]=2; 或者在定义结构体变量e时初始化: struct a e=2,'f',1,2,1.23;

以上是关于c语言 动态数组 输入输出不一致,问题出在哪?的主要内容,如果未能解决你的问题,请参考以下文章

C语言 建立动态数组,输入5个学生的成绩,另外用一个函数检查不合格成绩并输出

c语言 动态数组

C语言文件写入时报错,不知道问题出在哪了!

c语言中怎样实现对二维数组元素进行赋值并输出。

C语言怎么定义一个二维数组可以使每行的输入长度任意

C语言结构体数组 的输入方式