나는 수업을 위해 일하고 있습니다. 우리는 포인터를 사용하고 있습니다. 우리는 (malloc을 사용하여) 사용자가 결정한 요소의 수를 가진 배열을 생성해야했습니다. 나는 그 부분을 모두 작동 시켰습니다. 두 번째로 배열을 내림차순으로 정렬해야했습니다. 나는 왜 이것이 작동하지 않는지 전혀 모른다. 이 코드는 전체 배열을 뒤집어서 3 4 5 12 5가 5 12 5 4 3이되도록 만들지 만, 원하는 것은 아닙니다. 나는 그것이 작은 무엇인가 확실하다. 그러나 나의 인생 동안 나는 내가 무엇을 잘못하고 있는지에 관해 계산할 수 없다.C에서 배열을 정렬하는 데 포인터를 사용하는 데 문제가 있습니다
void main()
{
int *p, *sizearray, *q;
int i, siz;
printf("How large do you want the array? Enter a number between 0 and 50\n");
scanf("%d", &siz);
if (siz <= 50)
{
p = genarr(siz);
for (i = 0; i <siz; i++)
printf("%i\n", *(p + i));
arrsort(p,siz);
for (i = 0; i <siz; i++)
printf("%i\n", *(p + i));
}
else
printf("That number was not in the given range");
while(1);
}
#include "stdafx.h"
#include <time.h> // required for the time_t structure
#include <stdlib.h> // Reqwuired for the srand() and rand() functions
#include "ArrEdit.h"
int* genarr(int size)
{
time_t t;
int i, m;
int *sizearr;
sizearr = (int*)malloc(sizeof(int)*size);
srand((unsigned)time(&t));
for (i = 0; i<size; i++)
*(sizearr + i) = rand() % 50;
return sizearr;
free(sizearr);
}
int *arrsort(int*prt, int si)
{
int k, j;
int temp; // holding variable
for (k = 0; k< (si - 1); k++) // element to be compared
for (j = (k + 1); j < si; j++) // rest of the elements
{
swap(&prt[k], &prt[j]);
}
return prt;
}
void swap(int *s, int *r)
{
int pSwap = *r;
*r = *s;
*s = pSwap;
}
요소가 이미 순서대로 있는지 확인하고,이 코드는 수행하지 않을 배열을 역전시키기만하는 것처럼 사용자의 설명이 소리가납니다. –
질문의 일부가 아니지만 무료 (sizearr)입니다. 함수를 이미 종료했기 때문에 호출되지 않습니다. 그러나 어쨌든 포인터를 반환하고 있기 때문에 사용하지 않으려는 메모리가 삭제되므로 해제하지 않으십시오. – IllusiveBrian
내가 틀렸다면 정정 해 주겠지 만 실제로 이것은 유효한 C++ 코드 일 수있는 100 % C 코드처럼 보입니까? –