source

포인터를 선언합니다.유형과 이름 사이의 공백 왼쪽 또는 오른쪽에 아스타리스크가 표시됩니까?

goodcode 2022. 8. 27. 09:29
반응형

포인터를 선언합니다.유형과 이름 사이의 공백 왼쪽 또는 오른쪽에 아스타리스크가 표시됩니까?

중복 가능성:
char* 문자열과 char *string 중 어느 쪽이 더 말이 됩니까? C++에서의 포인터 선언: 아스타리스크 배치

많은 코드에서 혼합된 버전을 봐왔어요(이는 참고로 C 및 C++에 적용됩니다).사람들은 두 가지 방법 중 하나로 포인터를 선언하는 것 같은데, 나는 그것이 중요한지 어떤 것이 옳은지 전혀 모르겠다.

타입명 옆에 아스타리스크를 붙이는 첫 번째 방법은 다음과 같습니다.

someType* somePtr;

두 번째 방법은 다음과 같이 변수 이름 옆에 아스타리스크를 붙이는 것입니다.

someType *somePtr;

이게 한동안 날 미치게 하고 있어.포인터를 선언하는 표준 방법이 있습니까?포인터가 어떻게 선언되는지가 문제가 되긴 하나요?저는 두 선언을 모두 사용해 본 적이 있으며 컴파일러는 어느 쪽을 선택하든 상관하지 않는다는 것을 알고 있습니다.하지만, 내가 두 가지 다른 방식으로 선언된 포인터를 본 사실은 그 뒤에 이유가 있다고 믿게 한다.어떤 방법이 더 읽기 쉬울지, 아니면 논리적인지 궁금해요.

그건 취향의 문제이고, 일종의 성스러운 전쟁이죠, 브레이스 스타일처럼요.

스타일

someType* somePtr;

포인터 변수의 유형을 강조합니다.그것은 본질적으로, "유형"이라고 말하고 있다.somePtr포인터입니다.someType".

스타일

someType *somePtr

지적된 데이터의 유형을 강조하고 있습니다.이는 본질적으로 "이것이 지적한 데이터의 유형"을 말합니다.somePtrsomeType".

둘 다 같은 의미이지만 포인터를 만들 때 주어진 프로그래머의 멘탈 모델이 포인터 데이터나 포인터 변수에 "집중"되는지에 따라 달라집니다.

중간에 놓기(와 같이)someType * somePtr)는 어느 쪽에도 커밋되지 않도록 하고 있습니다.

그건 중요하지 않아.이제 누군가가 나타나서 질문을 이중으로 종결할 것이고, 다른 누군가가 어떻게 그 질문을 할 것인지 보여줄 것이다.int* a동일한 선언에 여러 변수를 선언하면 다음과 같이 중단됩니다.int *a코드의 구문 구조를 더 잘 반영하고, 또 다른 것은 Strustrup이 코드의 구문 구조를 선호한다는 것을 보여줄 것입니다.int* a왼쪽에 활자를 함께 보관합니다.

많은 의견들이 있지만, 여기서는 "올바른" 방법이 없다.

상관없습니다. 개인적인 취향입니다.

타입을 함께 유지하는 것을 좋아하는 사람도 있습니다.

int* p;

다른 사람들은 다음과 같은 이유로 변수 옆에 표시되어야 한다고 말합니다.

int *p, x;//declare 1 int pointer and 1 int
int *p, *x;//declare 2 int pointers.

시간이 지남에 따라 당신은 이것을 간과하고 두 가지 변형 모두를 받아들이게 될 것이다.

그 차이는 C++가 C 위에 더 강한 타입의 시스템을 추가했기 때문입니다.C 프로그래머는 보통 "값"의 관점에서 생각하기 때문에

int  *pValue;

"pValue의 참조 해제는 int"로 읽히는 반면 C++ 프로그래머는 "type"으로 생각하기 때문에

int* pValue;

"type pValue is pointer to int" 라고 되어 있습니다.컴파일러에서는 전혀 차이가 없습니다.그러나 C++에서 프로그래밍할 때 "값 의미론"을 고집하는 것은 C 프로그래머라는 것을 알게 될 것입니다.

내가 지금까지 봐온 모든 방법은

TheType *myPointer

TheType 유형의 POINTER를 선언하기 때문입니다.유사한 선언

TheType myVar

는 TheType 유형의 인스턴스 변수를 선언하는 것입니다.

또, 이것을 명확하게 해, 읽기 쉽게 할 수 있습니다.

TheType myVar, *myPointer;

변수 이름 옆에 아스타리스크를 붙이는 게 더 명확할 것 같아요.

해서 선언할 도 있어요.someType* one, two; 다 입니다.onetwo...someTypesomeType *one, *two는 이 문제를 회피합니다.

언급URL : https://stackoverflow.com/questions/2660633/declaring-pointers-asterisk-on-the-left-or-right-of-the-space-between-the-type

반응형