source

C/C++에서 포인터 변수를 올바르게 선언하는 방법

factcode 2022. 9. 6. 22:15
반응형

C/C++에서 포인터 변수를 올바르게 선언하는 방법

포인터 변수를 선언할 때 다음과 같은 표기법을 사용하는 사람도 있습니다.

(a) char* p;

대신

(b) char *p;

나는 (b)를 사용한다.표기법 (a)의 이면에 있는 이성은 무엇입니까?문자 포인터는 문자 포인터 자체가 아니기 때문에 표기법(b)이 더 이해가 됩니다.대신 유형은 character이고 변수는 문자에 대한 포인터일 수 있습니다.

char* c;

이것은 char* 타입이 있는 것처럼 보이며 변수 c는 그 타입입니다.그러나 실제로는 타입이 char이고 *c(c가 가리키는 메모리 위치)는 그 타입(char)입니다.여러 변수를 동시에 선언하면 이 차이가 명확해집니다.

char* c, *d;

이거 이상해.c와 d는 모두 문자를 가리키는 같은 종류의 포인터입니다.다음 거는 좀 더 자연스러워 보이니까.

char *c, *d;

Bjarne Stroustrup은 말했다:

"int*p;"와 "int*p;" 사이의 선택은 옳고 그름이 아니라 스타일과 강조에 관한 것입니다.C는 표현을 강조했다; 선언은 종종 필요악에 지나지 않는다고 여겨졌다.반면 C++는 활자에 큰 비중을 두고 있다.

"일반 C 프로그래머"는 "int *p;"라고 쓰고 구문을 강조하는 "*p is the int"를 설명하며 스타일의 정확성을 주장하기 위해 C(및 C++) 선언 문법을 가리킬 수 있다.실제로 *는 문법의 이름 p에 결합됩니다.

"일반 C++ 프로그래머"는 "int* p;"라고 쓰고 "p는 int"를 강조하는 유형을 설명합니다.실제로 p의 유형은 int*입니다.C++의 고급 부품을 잘 사용하기 위해서는 그 강조가 중요하다고 생각합니다.

출처 : http://www.stroustrup.com/bs_faq2.html#whitespace

한 줄에 여러 개의 포인터를 선언하는 경우(예: 네 번째)에는 변수와 함께 별표 표시를 사용하는 것이 익숙하기 때문에 후자의 스타일을 권장합니다.

저는 개인적으로 이 제품을*다른 타입과 함께

char* p;  // p is a pointer to a char.

사람들은 논쟁할 것이다.char* p, q;오해의 소지가 있다.그러면 안 돼요.

쓰는 법에는 차이가 없다.그러나 한 줄에 두 개 이상의 포인터를 선언하는 경우 원하는 것이 명확하기 때문에 (b) 배리언트를 사용하는 것이 좋습니다.아래를 보세요.

int *a;
int* b;      // All is OK. `a` is pointer to int ant `b` is pointer to int
char *c, *d; // We declare two pointers to char. And we clearly see it.
char* e, f;  // We declare pointer `e` and variable `f` of char type.
             // Maybe here it is mistake, maybe not. 
// Better way of course is use typedef:
typedef char* PCHAR;
PCHAR g, h;  // Now `g` and `h` both are pointers.
// If we used define construction for PCHAR we'd get into problem too.

타협은

char * p;

K&R의 용도

char *p;

부호화 기준을 따르지 않는 한, 그것은 당신에게 달려 있습니다.이 경우, 다른 모든 사람이 하는 대로 따라야 합니다.

이것은 모두 취향에 따라 다릅니다.개인적으로 프로젝트에서는 char*가 표시되어 있기 때문에 여러 포인터를 여러 줄에 걸쳐 선언하는 경향이 있습니다.이를 위한 진정한 "올바른" 방법은 없으며, 결국 모든 것은 선호도에 달려 있습니다.어떤 이들은 (a)를 읽기 쉽다고 말하는 반면, 다른 이들은 (b) 같은 행에 같은 유형의 변수를 더 많이 선언하는 것이 더 쉽다고 말한다.

나는 (b)가 더 흔하다는 것을 알게 되었고, 경우에 따라서는 본 적이 있다.

char * a;

뭐 이런 거.다시 한 번 기본 설정입니다.고객님이 만족하고 있는 것, 또는 제가 작업하고 있는 프로젝트가 무엇이든, 저는 사용할 것입니다(제가 직접 작성하는 경우를 제외하고). (a)

언급URL : https://stackoverflow.com/questions/6990726/correct-way-of-declaring-pointer-variables-in-c-c

반응형