#include <stdio.h>
#include <stdlib.h>
int sumArray(int* p);
int main(){
int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, sum;
int* p = array;
sum = printf("The sum of the array is: %d", sumArray(p));
return 0;
}
int sumArray(int* p){
int sum = 0;
while(*p){
sum += *p;
p++;
}
return sum;
}
이 코드를 실행하면 주소처럼 보이는 합계에 대해 6 자리 값을 얻습니다. 그래서 내가 여기서 정확히 뭘 잘못하고 있니?
while(*p)
null로 끝나는 유용한 속성을 가지고 있기 때문에 C에서 문자열 을 처리하는 꽤 관용적 인 방법입니다 . 널 종료 자 (숫자 값이 0 인 문자)에 도달하면 *p
0이되고 루프가 종료됩니다.
배열에이 속성이 없으므로 배열 while(*p)
의 전체 길이에 대해 true이며 정의되지 않은 동작 인 범위를 벗어납니다.
옵션은 다음과 같습니다.
int i = 0; while (i < LENGTH){}
관용적으로 사용하십시오.for(int i = 0; i < LENGTH; i++)
while (*p != SENTINEL)
이전 옵션은 번거롭지 않으며 임의 int
의 것을 매직 넘버로 지정할 필요가 없습니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다