Development/C, C++(556)
-
스콧 마이어스(Scott Meyers) 인터뷰 기사
SCOTT MEYERS's BLOG http://scottmeyers.blogspot.kr/ Scott Meyers - Wiki https://en.wikipedia.org/wiki/Scott_Meyers C++계의 록스타, 스콧 마이어스 스콧 마이어스와의 인터뷰 기사 http://www.bloter.net/archives/260278
-
지역변수의 주소를 반환해서 생기는 문제 해결하기
지역변수의 주소를 반환해서 생기는 문제 해결하기 1차원 배열이 선언된 곳에 static키워드를 붙여주어서 해결합니다. Ex58.c의 에러를 수정합니다. 소스코드 #include // 함수의 선언 int* func( ); int main(void){ int* p=NULL; // 포인터변수는 4byte p=func( ); // 함수의 호출 printf("%d %d %d %d %d\n", p[0], p[1], p[2], p[3], p[4]); printf("%d %d %d %d %d\n", *(p+0), *(p+1), *(p+2), *(p+3), *(p+4)); return 0; } // 함수의 정의 int* func(){ static int array[ ]={10, 20, 30, 40, 50}; // sta..
-
지역변수의 주소를 반환해서 생기는 문제 2
지역변수의 주소를 반환해서 생기는 문제 2 func()함수는 배열의 주소를 반환하여 배열 요소들에 저장된 데이터를 출력하는 기능을 가지고 있습니다. 그러나 array가 함수 종료후 메모리에서 사라지므로 잘못된 실행결과를 출력하게 됩니다. 소스코드 #include // 함수의 선언 int* func(); int main(void){ int* p=NULL; p=func( ); // 함수의 호출 // array[0], array[1], array[2], array[3], array[4] printf("%d %d %d %d %d\n", p[0], p[1], p[2], p[3], p[4]); // *(array+0), *(array+1), *(array+2), *(array+3), *(array+4) printf..
-
지역변수의 주소를 반환해서 생기는 문제 1
지역변수의 주소를 반환해서 생기는 문제 1 정적(static)변수를 사용하여 지역변수의 주소를 반환해서 생기는 문제 해결하기 함수의 결과로 정적 변수의 주소를 반환 학습내용 정적(static)변수: 함수가 종료된 후에도 메모리 공간이 소멸되지 않고 남아 있습니다. 소스코드 #include // 함수의 선언 int* input( ); int main(void){ int* p=NULL; p=input( ); // 함수의 호출 printf("%d \n", *p); return 0; } // 함수의 정의 int* input(){ static int num; // 정적 변수 선언 fflush(stdout); scanf("%d", &num); return # // 경고 없어짐 } // static 키워드가 ..
-
Ex56-함수의 결과로 지역 변수의 주소를 반환할 경우 경고가 발생하는 것 확인하기
함수의 결과로 지역 변수의 주소를 반환할 경우 경고가 발생하는 것 확인하기 학습내용 지역변수는 함수 종료시 메모리에서 사라지는데 이 사라진 주소의 메모리 주소를 p가 참조할 경우 문제가 발생합니다. Warning 해결을 위해 지역변수를 static변수로 수정해 줍니다. 소스코드 #include // 함수의 선언 int* input(); // 입력값없이 함수를 처리한 다음 출력은 주소(int*)로 처리(반환) int main(void){ int* p=NULL; p=input(); // 함수의 호출 printf("%d \n", *p); return 0; } // 주소를 반환하는 함수의 정의 //int input(){ int* input(){ int num; // 지역변수 // static int num; /..
-
Ex55-배열포인터를 사용하지 않고 1차원 포인터 변수에 2차원 배열의 주소를 저장
배열포인터를 사용하지 않고 1차원 포인터 변수에 2차원 배열의 주소를 저장 1)1차원 포인터 변수에 2차원 배열의 주소를 저장할 경우 에러발생확인 2)에러발생 후 에러 수정 소스코드 #include // 함수의 선언 void func(int* p); //void func(int (*p)[4]); // Error수정시 int main(void){ int array[2][4]={10,20,30,40,50,60,70,80}; func(array); // 함수의 호출 return 0; } // 함수의 정의 void func(int* p){ // 1차원 포인터 변수 printf("%d %d %d %d %d %d %d %d \n", p[0],p[1],p[2],p[3],p[4],p[5],p[6],p[7]); // 1..