我试图在我的程序中使用malloc分配一些内存(我没有太多使用malloc的经验,因为我刚开始学习如何使用它)。我创建的程序有效,但我认为我没有正确使用malloc,我想学习如何正确使用它。
我的程序的基本思想是需要3行输入。第一行是你想要按奇数还是偶数排序,第二行是数组的大小,第三行是数组中的整数。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char* sort;
int n;
int* ar;
int i;
void test()
{
int temp;
int j = 1;
if (strcmp(sort, "odd") == 0) {
for (i = 0; i < n;) {
if (j != n) {
if (ar[i] % 2 != 0) {
if (ar[j] % 2 != 0) {
if (ar[j] < ar[i]) {
temp = ar[i];
ar[i] = ar[j];
ar[j] = temp;
j++;
}
else {
j++;
}
}
else {
j++;
}
}
else {
j++;
i++;
}
}
else {
i++;
j = i + 1;
}
}
}
if (strcmp(sort, "even") == 0) {
for (i = 0; i < n; i++) {
if (j != n) {
if (ar[i] % 2 == 0) {
if (ar[j] % 2 == 0) {
if (ar[j] < ar[i]) {
temp = ar[i];
ar[i] = ar[j];
ar[j] = temp;
j++;
}
else {
j++;
}
}
else {
j++;
}
}
else {
j++;
i++;
}
}
else {
i++;
j = i + 1;
}
}
}
}
void main()
{
ar = malloc(sizeof(int) * 10);
sort = malloc(sizeof(char) + 5);
printf("Enter odd or even\n");
scanf("%s", sort);
printf("Enter the size of the array \n");
scanf("%d", &n);
printf("Enter the elements of the array \n");
for (i = 0; i < n; i++) {
scanf("%d", &ar[i]);
}
test();
for (i = 0; i < n; i++) {
printf("%d ", ar[i]);
}
}
答案 0 :(得分:2)
您需要等到他们告诉您数组的大小,然后使用malloc()
分配一个大小的数组。
您不需要对malloc
使用sort
,您可以将其声明为普通数组。通常,当您需要分配动态数量的项目时,或者当项目的大小是动态的时,您使用malloc()
,对于具有固定大小的单个项目,您不需要它。
int *ar;
char sort[5];
void main()
{
printf("Enter odd or even\n");
scanf("%s", sort);
printf("Enter the size of the array \n");
scanf("%d", &n);
ar = malloc(n * sizeof(int));
printf("Enter the elements of the array \n");
for (i = 0; i < n; i++) {
scanf("%d", &ar[i]);
}
test();
for (i = 0; i < n; i++) {
printf("%d ", ar[i]);
}
}