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?)
- 어제보다 나은 오늘, 오늘보다 나은 내일.
논리부터 아닌것 같아요
무얼하자는건지는 알겠는데 일단 코드보면 논리가 틀린것같네요
완벽한 세상을 위하여!
포인터 변수의 타입에 대한 이해를 돕고자 작성해봤습니다.
함수의 프로토타입과, 그 함수가 어떻게 호출되었는지(인자를 어떻게 넘겼는지)를 자세히 보시기 바랍니다.
저는 이렇게 생각했습니다.
모두 감사합니다..
제가 c++배우게 된지 얼마 안되서 포인터가 헷갈리네요.;;
공부좀 더해서 제대로 물어볼게요...
감사합니다.`
댓글 달기