컴퓨터공학 💻 도서관📚

지옥에서 돌아온 C언어 복습 (2023.3.2목 일기) 본문

📚✍마법 수습생의 여행일기

지옥에서 돌아온 C언어 복습 (2023.3.2목 일기)

들판속초록풀 2023. 3. 2. 22:13

C언어 복습이 조금 필요하다는 것을 염두에 두고 있었는데

오늘 C언어를 포인터부터 복습하기 시작했다.

 

문제 : 포인터 px, py, pz에 있는 주소들을 pz, px, py 처럼 오른쪽으로 이동시킨 후 출력하라.

 

이 문제를 오랜만에 풀어보았는데 그동안 복습을 게을리 한 것이 바로 들어났다.

그 쉬운 "tmp 임시변수를 이용한 값 교환"을 까먹고 버벅였다.

 

tmp = px;
px = pz;
pz = py;
py = tmp;

 

이를 그림으로 단순화하면 이렇다.

코딩하다 만난 오류는 하나였다.(다행히... 💣😝 )

 

경고C4700

C 및 C++에서는 기본적으로 지역 변수가 초기화되지 않습니다.

초기화되지 않은 변수는 모든 값을 포함할 수 있으며, 변수를 사용하면 정의되지 않은 동작이 발생합니다.

경고 C4700은 거의 항상 프로그램에서 예측할 수 없는 결과 또는 충돌을 일으킬 수 있는 버그를 나타냅니다.

 

초기화에 대한 이슈였다.

 

int x, y, z;
int* px, * py, * pz, *tmp;

px = &x; py = &y; pz = &z;    // 이 코드를 scanf 다음에 써서 오류가 났었다. 변수를 사용하기 전에는 꼭 초기화를 하기

scanf("%d %d %d", px, py, pz);

 

 

완성된 코드

#include <stdio.h>
#pragma warning(disable:4996)

int main() {
	int x, y, z;
	int* px, * py, * pz, *tmp;

	px = &x; py = &y; pz = &z;

	scanf("%d %d %d", px, py, pz);
	
	tmp = px;
	px = pz;
	pz = py;
	py = tmp;

	printf("%d %d %d", *px, *py, *pz);
    
    return 0;
}

 

 

참고) https://learn.microsoft.com/ko-kr/cpp/error-messages/compiler-warnings/compiler-warning-level-1-and-level-4-c4700?f1url=%3FappId%3DDev16IDEF1%26l%3DKO-KR%26k%3Dk(C4700)%26rd%3Dtrue&view=msvc-170 

 

컴파일러 경고(수준 1 및 수준 4) C4700

자세한 정보: 컴파일러 경고(수준 1 및 수준 4) C4700

learn.microsoft.com

 

 

Comments