c++ 여기 오류가 뭘까요....
#include
#include 3
int sigmaByPointer(int count, int *numbers[]); 여기 int *numbers[]
int main(int argc, char** argv){
int i, sigma, j;
int numbers[3][3];
int *p;
sigma = 0;
for (j = 1; j <= 3 ; j++){
for(i = 1; i <= j; i++){
numbers[j - 1][i - 1] = i*j;
}
}
p = NULL;
(int *)p = &numbers[0][0]; 여기
sigma = sigmaByPointer(3, p); 여기 부분이 자꾸 에러가 나는데 뭐가 문제일까요??
printf("SigmaByPoiniter = %d \n", sigma);
return 0;
}
int sigmaByPointer(int count, int *numbers[]){ 이 블록 전체 이렇게 문제가 있는거같은데요...
int i, sigma, j;
sigma = 0;
for(i = 1; i <= count; i++){
sigma += *numbers[i-1];
printf("sigma = %d \n", sigma);
}
return sigma;
}
주소랑 값이랑 계속 헷갈려서 제대로 못하겠네요...
배열은
1
2 4
3 6 9
이렇게 됩니다.
주소값을 넘겨서 데이터 합계구하는 건데요
포인터를 입력값으로 받아서 하도록 한겁니다.
어떻게 하면 될까요??


타입부터 일단 안 맞죠
뭘 하고자 하시는지 의도는 잘 모르겠지만,
변수 p의 타입은 "정수에 대한 포인터(int*)"인데,
sigmaByPointer() 함수에서 p를 건네받는 부분(int* numbers[])의 타입은 int** 니까 타입 자체가 안 맞죠.
컴파일이 안 되거나, 컴파일은 되어도 경고를 뿌리거나 하겠네요.
그리고 sigmaByPointer() 함수 내부에서 *num[i] 를 계속 더하면서 누적합을 구하시는 것 같은데,
그 부분에서 에러날 확률이 높습니다 (access violation?)
- 어제보다 나은 오늘, 오늘보다 나은 내일.
논리부터 아닌것 같아요
무얼하자는건지는 알겠는데 일단 코드보면 논리가 틀린것같네요
완벽한 세상을 위하여!
포인터 변수의 타입에 대한 이해를 돕고자 작성해봤습니다.
#include <stdio.h> #define ROW 3 #define COL 4 void SetValue(int *ptr, int val); void InitArray(int len, int arr[]); void InitArrayUsingAddress(int len, int (*arr)[]); void InitPointerArrayWithArray(int len, int *parr[], int arr[]); void InitPointerArrayWithArrayUsingAddress(int len, int* (*parr)[], int arr[]); void InitTwoDimArray(int row, int arr[][COL]); void InitTwoDimArrayUsingAddress(int row, int (*arr)[][COL]); void PrintArray(int len, const int arr[]); void PrintPointerArray(int len, const int *parr[]); void PrintTwoDimArray(int row, const int (*arr)[COL]); int val = 0; int main(void) { int num = 10; int *ptr = # int arr1[COL] = {0}; int* parr1[COL]; int arr2[ROW][COL] = {{0}}; printf("num = %d\n", num); SetValue(&num, 20); printf("num = %d\n", num); SetValue(ptr, 30); printf("num = %d\n", num); puts("InitArray"); InitArray(COL, arr1); PrintArray(COL, arr1); puts("InitArrayUsingAddress"); InitArrayUsingAddress(COL, &arr1); PrintArray(COL, arr1); puts("InitPointerArrayWithArray"); InitPointerArrayWithArray(COL, parr1, arr1); PrintPointerArray(COL, (const int **)parr1); puts("InitPointerArrayWithArrayUsingAddress"); InitPointerArrayWithArrayUsingAddress(COL, &parr1, arr1); PrintPointerArray(COL, (const int **)parr1); puts("InitTwoDimArray"); InitTwoDimArray(ROW, arr2); PrintTwoDimArray(ROW, arr2); puts("InitTwoDimArrayUsingAddress"); InitTwoDimArrayUsingAddress(ROW, &arr2); PrintTwoDimArray(ROW, arr2); return 0; } void SetValue(int *ptr, int val) { *ptr = val; } void InitArray(int len, int arr[]) { int i; for (i=0; i<len; ++i) arr[i] = val + i; ++val; } void InitArrayUsingAddress(int len, int (*arr)[]) { int i; for (i=0; i<len; ++i) (*arr)[i] = val + i; ++val; } void InitPointerArrayWithArray(int len, int* parr[], int arr[]) { int i; for (i=0; i<len; ++i) parr[i] = &arr[i]; } void InitPointerArrayWithArrayUsingAddress(int len, int* (*parr)[], int arr[]) { int i; for (i=0; i<len; ++i) (*parr)[i] = &arr[i]; } void InitTwoDimArray(int row, int arr[][COL]) { int i, j; for (i=0; i<row; ++i) for (j=0; j<COL; ++j) arr[i][j] = val+row*i+j; ++val; } void InitTwoDimArrayUsingAddress(int row, int (*arr)[][COL]) { int i, j; for (i=0; i<row; ++i) for (j=0; j<COL; ++j) (*arr)[i][j] = val+row*i+j; ++val; } void PrintArray(int len, const int arr[]) { int i; for (i=0; i<len; ++i) printf("%d ", arr[i]); puts(""); } void PrintPointerArray(int len, const int *parr[]) { int i; for (i=0; i<len; ++i) printf("%d ", *parr[i]); puts(""); } void PrintTwoDimArray(int row, const int (*arr)[COL]) { int i, j; for (i=0; i<row; ++i) { for (j=0; j<COL; ++j) printf("%d ", arr[i][j]); puts(""); } }함수의 프로토타입과, 그 함수가 어떻게 호출되었는지(인자를 어떻게 넘겼는지)를 자세히 보시기 바랍니다.
저는 이렇게 생각했습니다.
모두 감사합니다..
제가 c++배우게 된지 얼마 안되서 포인터가 헷갈리네요.;;
공부좀 더해서 제대로 물어볼게요...
감사합니다.`
댓글 달기