인덱스를 사용하여 작동하는 프로그램이 있습니다. 그러나 할당을위한 포인터로 변경해야합니다.C++에서 포인터에 대한 인덱스
포인터에 전환하려고하는 아래의 코드에서 포인터를 인덱스로 바꾸고 포인터를 포인터로 변경하는 모든 곳에서 값을 가져옵니다. 적어도 내 생각은 그렇다.
#include <cstdlib>
#include <iostream>
#include <iomanip>
/*
Program sorts an array of integers using a selection sort.
The general algorithm repeatedly finds the smallest number
in the array and places it at the front of the list.
*/
using namespace std;
const int size = 20;
int find_small_index (int start_index, int numbers []);
void swap_values (int index1, int index2, int numbers []);
void print (int numbers []);
int main(int argc, char *argv[])
{
// array of numbers
int numbers [size] = {7, 9, 21, 16, 65, 8, 32, 1, 17, 41,
54, 128, 62, 44, 12, 1023, 89, 905, 32, -12};
int start_index; // current starting spot for search
int small_index; // index of the smallest number in the array
start_index = 0;
// continue finding the smallest value and placing it
// at the front of the list
while (start_index < size - 1)
{
small_index = find_small_index (start_index, numbers);
swap_values (small_index, start_index, numbers);
start_index++;
}
cout << "\n\nThe sorted array is:\n";
print (numbers);
cout << "\n\n";
system("PAUSE");
return EXIT_SUCCESS;
}
// finds and returns the index of the smallest number remaining in
// the array
int find_small_index (int start_index, int numbers [])
{
int small_index, // smallest index to be returned
index; // current index being viewed
small_index = start_index;
// look at each element
for (index = start_index + 1; index < size; index++)
// remember index of smaller value
if (numbers [index] < numbers [small_index])
small_index = index;
return small_index;
}
// swap the values in the array at indexes index1 and index2
void swap_values (int index1, int index2, int numbers [])
{
int swapper;
swapper = numbers [index1];
numbers [index1] = numbers [index2];
numbers [index2] = swapper;
}
// prints the array in nice format, 10 numbers per line
void print (int numbers [])
{
int on_line, // number of values printed on the line
index; // index of current number being printed
on_line = 0;
// print each element in the array
for (index = 0; index < size; index++)
{
cout << setw (5) << numbers [index];
on_line++;
// if 10 numbers have been printed on the line
// go to next line
if (on_line == 10)
{
cout << "\n";
on_line = 0;
}
}
}
이 내가 포인터를 사용하지만 점점 오류를 계속 변경하는 것을 시도하고 동일한 코드는 다음과 같습니다 다음은 인덱스를 사용하는 코드입니다. 누군가 내가 잘못하고있는 것을 나에게 설명 할 수 있습니까?
#include <cstdlib>
#include <iostream>
#include <iomanip>
/*
Program sorts an array of integers using a selection sort.
The general algorithm repeatedly finds the smallest number
in the array and places it at the front of the list.
*/
using namespace std;
const int size = 20;
int find_small_pointer (int start_pointer, int numbers []);
void swap_values (int index1, int index2, int numbers []);
void print (int numbers []);
int main(int argc, char *argv[])
{
// array of numbers
int numbers [size] = {7, 9, 21, 16, 65, 8, 32, 1, 17, 41,
54, 128, 62, 44, 12, 1023, 89, 905, 32, -12};
int *start_ptr
, *start_pointer; // current starting spot for search
int *small_ptr
, *small_pointer; // index of the smallest number in the array
int * mover;
int *size;
start_ptr = 0;
// continue finding the smallest value and placing it
// at the front of the list
while (start_ptr < size - 1)
{
*small_pointer = find_small_pointer (*start_pointer, numbers);
swap_values (*small_pointer, *start_pointer, numbers);
*start_pointer++;
}
cout << "\n\nThe sorted array is:\n";
print (numbers);
cout << "\n\n";
system("PAUSE");
return EXIT_SUCCESS;
}
// finds and returns the index of the smallest number remaining in
// the array
int find_small_pointer (int *start_pointer, int numbers [])
{
int *small_pointer, // smallest index to be returned
mover; // current index being viewed
small_pointer = start_pointer;
// look at each element
for (mover = start_pointer + 1; mover < size; mover++)
// remember index of smaller value
if (numbers [mover] < numbers [small_ptr])
small_pointer = mover;
return small_pointer;
}
// swap the values in the array at indexes index1 and index2
void swap_values (int mover1, int mover2, int numbers [])
{
int swapper;
swapper = numbers [mover1];
numbers [mover1] = numbers [mover2];
numbers [mover2] = swapper;
}
// prints the array in nice format, 10 numbers per line
void print (int numbers [])
{
int on_line, // number of values printed on the line
mover; // index of current number being printed
on_line = 0;
// print each element in the array
for (mover = 0; mover < size; mover++)
{
cout << setw (5) << numbers [mover];
on_line++;
// if 10 numbers have been printed on the line
// go to next line
if (on_line == 10)
{
cout << "\n";
on_line = 0;
}
}
}
사이드 노트 : 모든 변수를 함수의 맨 위에 선언하지 마십시오. 가능한 한 늦게 선언하십시오. 이것은 일반적으로 초기화 할 때 선언하는 것을 의미합니다. –