반응형
c와 c++에서 여러개의 포인터 변수를 한번에 선언하는 경우 주의해야 할 사항이 있다.
예를 들어,
아래와 같이 포인터(*)를 char*와 같이 선언하고 두개의 변수를 한번에 선언해보자.
char* str1 = NULL, str2 = NULL;
#include <stdio.h>
int main(void) {
char* str1 = NULL, str2 = NULL;
printf("str1 : %d\n", sizeof(str1));
printf("str2 : %d\n", sizeof(str2));
return 0;
}
결과는 아래와 같이 8과 1이 출력된다.
자료형의 크기를 출력하여 변수의 크기를 알아 볼수 있는데, str1은 8 byte로 포인터지만 str2는 char 자료형의 크기인 1 byte가 출력된 것을 볼 수 있다.
참고로 포인터 크기는 64bit 운영체제에서 compile 한 경우에는 8 byte가 되고, 32bit 운영체제에서 4byte가 된다.
str1 : 8
str2 : 1
즉, 포인터를 한번에 선언할 때는 위와 같이 선언하면 안되고 아래와 같이 선언해야한다.
char *str3 = NULL, *str4 = NULL;
#include <stdio.h>
int main(void) {
char *str3 = NULL, *str4 = NULL;
printf("str3 : %d\n", sizeof(str3));
printf("str4 : %d\n", sizeof(str4));
return 0;
}
결과는 아래와 같이 두개의 포인터 변수가 8 byte로 포인터로 각각 선언되었음을 확인할 수 있다.
str3 : 8
str4 : 8
포인터 변수를 한번에 선언하는 경우에는 *(Asterisk, 아스테리스트)를 각 변수 앞에 붙여야 의도한 바와같이 올바르게 선언하여 사용할 수 있다.
반응형
'C, C++' 카테고리의 다른 글
[C] ^M (carriage return) 아스키코드 (0) | 2023.03.06 |
---|---|
[c] function() function(void) 차이 (0) | 2022.08.31 |
[c++] raw string literal (원시 문자열 리터럴) (0) | 2022.08.24 |
[c/c++] exit 함수 (0) | 2022.08.10 |
[cmake] cmake 사용법 (조건문, 출력, STREQUAL, option, FATAL_ERROR) (0) | 2021.12.27 |
댓글