이.. 포인터에 관한 문제가.. 좀...
글쓴이: min2to / 작성시간: 화, 2006/01/24 - 12:52오전
영 이해가 않가서...... 남기네여;; 흑흑;;
#include <stdio.h> int ArrAdder(int* pArr, int n); int main(void) { int arr[10]={1,2,3,4,5,6,7,8,9,10}; int sumofarr; sumofarr=ArrAdder(arr, sizeof(arr)/sizeof(int)); <-이줄이.. 무슨뜻을.. 말하는건지..도무지.. 알 길이없네여;; printf("배열의 총 합 :%d \n",sumofarr); return; } int ArrAdder(int* pArr, int n) { int sum=0; int i; for(i=0; i<n; i++) <-이줄이 말하는.. n값은.. 뭔가여.....ㅜ.ㅜ 선언된.... 정수의 값을 말하는건가여?.... (음... .for문장에서.. 저 값이 실행될때까지.. 해주는건 .. 알고여;;;) sum+=pArr[i]; <-이줄이 뜻하는건.. sum=sum+pArr[i]맞져;..? 그럼.. pArr[i]는.. 배열 이져?... 그럼.. 음... 이 배열은.. 출력되서.. 어디에 연관이 있는건지.. ㅠ.ㅠ.ㅠ.... .. .. . . return sum; }
흑흑.. 선배님들....죄송하지만.. 부탁드립니다..
감사합니다.... ;; __꾸벅;;
Forums:
공부를 잘 하고 계신 것이라 생각하겠습니다.
책은 천천히 잘 보고 계신거죠? 처음 공부를 시작하실 때에는 천천히 이해하시면서 읽어야 합니다.
잠시 정신이 아득해지셔서 이해가 안되셨으리라 믿겠습니다. 자세히 알려드릴터이니 다음엔 책에서 해답을 찾으세요.
1. sumofarr=ArrAdder(arr, sizeof(arr)/sizeof(int)); 의 의미
int ArrAdder(int* , int) 함수를 실행한 결과값을 sumofarr 에 대입하라는 뜻입니다.
이 때, sizeof(arr)/sizeof(int) 는 arr 의 원소 갯수입니다. 즉 10이 되겠지요.
2. for (i=0; i<n; i++) 에서의 n의 역할
함수 int ArrAdder(int*, int) 는 두번째 인자로 n 을 받습니다. main() 함수 안에서 sizeof(arr)/sizeof(int) 로 지정이 되어 있으므로 함수 내에서는 10의 값을 받습니다. for문이 실행하는 최대 횟수를 지정하기 위해 n 의 값을 참조하고 있는 것입니다.
3. sum+=pArr[i]; 는 sum=sum+pArr[i]; 와 같습니다.
Re: 이.. 포인터에 관한 문제가.. 좀...
sizeof 명령어는 해당 인자의 메모리크기를 리턴합니다.
고로 처음앞의 sizeof(arr)은 int형 배열인 arr의 전체 크기를 리턴합니다. (위에서는 int형이 4byte라고 할때 int arr[10]으로 선언을 했으니 4byte인 int가 10개라서 40을 리턴하겠지요)
그리고 뒤의 sizeof(int)는 int형의 크기를 리턴합니다.
(32bit 머신에서는 4byte 겠지요?)
고로 위의 sizeof(arr)/sizeof(int) 문은 결국 arr의 배열의 갯수를 구하는 문장입니다.
int형 배열인데 그것을 int형의 크기로 나누었으니 결국 배열의 갯수를 리턴하겠지요.
함수 ArrAdder 에서 인자로 넘어온 값 n 입니다.
위의 메인에서 sizeof(arr)/sizeof(int)로 호출했으니 결국 arr의 배열의 갯수인 10이 n에 들어가 있겠죠
감사합니다 흑흑..
감사합니다.. 복받으실꺼예여 !!;;
모르는건 물어보라구 엄마 아빠가 알려주셧습니다
고수님,선배님들 도와주십쇼 독학하는 학생입니다
흠.. 복습해서 보니까여 흠.ㅠ.ㅠ.ㅠ ...민망해라..
흠.. 오늘 다시 복습해서 보니까..
저 문제의 답이.. 55가 나오더라구여..
45가 나올줄 알았는데.. 그래서 그런데여....
여서여.. arr의.. 값이. 10이 출력되어서 + 준다는 소리인가여?..
for값에 의해 출력된.. sizeof값을..
흠..(머리가 않좋아.. 보고 또 보고 또 보고했는데도.... 해답을못찾겟어서..)..
모르는건 물어보라구 엄마 아빠가 알려주셧습니다
고수님,선배님들 도와주십쇼 독학하는 학생입니다
Re: 흠.. 복습해서 보니까여 흠.ㅠ.ㅠ.ㅠ ...민망해라..
n은 sizeof(arr)/sizeof(int), 즉 10이므로, for(i=0; i<n; i++) 안에서는 i의 값이 0부터 n-1까지 변합니다. 안쪽 내용은 arr[i]를 sum에 더하는 거니까 arr[0]부터 arr[9]까지 모두 더하는 셈이고, 그럼 1+2+...+9+10 = 55가 나와야 겠죠.
혹시 계산을 잘못 하신 거라면 계산기를 써 보세요 :)
- 토끼군
Re: 흠.. 복습해서 보니까여 흠.ㅠ.ㅠ.ㅠ ...민망해라..
여기서여.... 0부터 9까지 더하는데.. 어떻해 10이 나오나여.. 흑흑;;;
sum값도 0이고.. 0+0은.. 0이고..1부터 9까지 일테구... 흑흑...
혹시.. 위에 (arr,sizeof...,...) 에서..arr의 값이.. 10이라.. 10을 더한건가여?..
흑흑;;
모르는건 물어보라구 엄마 아빠가 알려주셧습니다
고수님,선배님들 도와주십쇼 독학하는 학생입니다
Re: 흠.. 복습해서 보니까여 흠.ㅠ.ㅠ.ㅠ ...민망해라..
0부터 9까지 더하는 것이 아니라 더하는 부분의 코드를 보면
sum+=pArr[i]
으로 되어있습니다.
즉 sum에다가 pArr[i]의 값을 더하는데
이런식으로 되어있기 때문에 결국
1 + 2 + 3 + ... + 9 + 10
이 됩니다.
그래서 55가 되는 것이죠.
아하.. .정말 감사..흑흑..
4시간동안 낑낑 알다가.. 그냥 잠잤었는데.. 이제와서.. 보내여 흑흑;;
정말 감사,..
배열인건 알고 있었는데 흑흑 [0] 이.. 1부터 시작한다는걸
흐흐;; 깜빡;; 정말 감사감사.. ㅠ.ㅠ <-머저리.. 흑흑
모르는건 물어보라구 엄마 아빠가 알려주셧습니다
고수님,선배님들 도와주십쇼 독학하는 학생입니다
어쨌든 이럴땐
sizeof arr / sizeof arr[0] 을 쓰시면 좋습니다.
(포인터를 좀 아신다면 arr[0]을 *arr 로 짧게 쓰셔도 될 겁니다.
전 단지 좀 더 쉬운 이해를 위해서 말이죠.)
arr이 int형 배열이니까 arr의 첫째요소 arr[0] 은 당연히 int 겠죠.
arr이 double형 배열이 되어도 첫째요소 arr[0] 은 double이 되니까 알아서 잘 계산되겠죠.
Real programmers /* don't */ comment their code.
If it was hard to write, it should be /* hard to */ read.
댓글 달기