development

포인터 선언;

big-blog 2020. 7. 25. 10:15
반응형

포인터 선언; 유형과 이름 사이의 공백 왼쪽 또는 오른쪽에 별표가 있습니까? [복제]


가능한 중복 :
char * string 또는 char * string이 더 의미가있는 것은 무엇입니까? C ++에서 포인터 선언 : 별표 배치

많은 코드에서 혼합 버전을 보았습니다. (이것은 C와 C ++에 적용됩니다.) 사람들은 두 가지 방법 중 하나로 포인터를 선언하는 것처럼 보이며, 그것이 중요한지 어느 것이 올바른지 전혀 모릅니다.

별표를 유형 이름 옆에 두는 첫 번째 방법은 다음과 같습니다.

someType* somePtr;

두 번째 방법은 다음과 같이 변수 이름 옆에 별표를 두는 것입니다.

someType *somePtr;

이것은 지금 얼마 동안 나를 미치게 만들었습니다. 포인터를 선언하는 표준 방법이 있습니까? 포인터가 어떻게 선언되는지는 중요합니까? 이전에 두 선언을 모두 사용했으며 컴파일러가 어떤 식 으로든 신경 쓰지 않는다는 것을 알고 있습니다. 그러나 포인터가 두 가지 다른 방식으로 선언 된 것을 보았으므로 그 뒤에 이유가 있다고 생각하게됩니다. 두 가지 방법 중 하나가 누락되거나 읽을 수 있거나 논리적 인 경우 궁금합니다.


그것은 중괄호 스타일과 마찬가지로 선호와 다소 거룩한 전쟁의 문제입니다.

스타일

someType* somePtr;

포인터 변수의 유형을 강조하고 있습니다. 본질적으로 "유형 somePtr은 포인터- someType"입니다.

스타일

someType *somePtr

뾰족한 데이터의 유형을 강조하고 있습니다. 본질적으로 "가 가리키는 데이터 유형 somePtrsomeType"입니다.

둘 다 같은 것을 의미하지만, 포인터를 만들 때 주어진 프로그래머의 정신 모델이 "집중"되어 지적 대상 데이터 또는 포인터 변수에 의존하는지 여부에 달려 있습니다.

중간에 (as someType * somePtr) 넣으면 어느 쪽이든 커밋을 피하려고합니다.


중요하지 않습니다. 누군가가 와서 질문으로 속임수로 닫히고 다른 사람은 int* a동일한 선언에서 여러 변수를 선언 하면 방법이 어떻게 중단되는지 보여줄 것이며 그 방법 int *a은 코드의 구문 구조를 더 잘 반영하고 다른 사람은 Stroustrup을 보여줄 것입니다 int* a방법을 선호합니다 .

여기에는 많은 의견이 있지만 "올바른"방법은 없습니다.


중요하지 않습니다. 개인적인 취향입니다.

어떤 사람들은 유형을 함께 유지하기를 좋아합니다.

int* p;

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

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

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


C ++가 C 위에 더 강력한 유형 시스템을 추가했기 때문에 차이가 발생했습니다. AC 프로그래머는 일반적으로 "값"이라는 관점에서 생각합니다.

int  *pValue;

"pValue의 역 참조는 int"라고 읽지 만 C ++ 프로그래머는 "유형"으로 생각합니다.

int* pValue;

"pValue 유형은 int에 대한 포인터"를 읽습니다. 컴파일러는 전혀 차이가 없습니다. 그러나 C ++로 프로그래밍 할 때 "값 의미론"을 주장하는 것은 C 프로그래머라는 것을 알게 될 것입니다.


변수 이름에 별표를 두는 것이 더 명확하다고 생각합니다.

You might mistakenly declare someType* one, two; thinking that they are both pointers but only the variable one is a pointer; two is just a someType. Declaring as someType *one, *two avoids this problem.


Every single way I've seen ever is

TheType *myPointer

because you are declaring a POINTER of type TheType. Similar declaring

TheType myVar

would be declaring an instance variable of type TheType.

Also you can then clearly do this and have it easily readable

TheType myVar, *myPointer;

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

반응형