programing

int*i와 int*i의 차이

newstyles 2023. 6. 18. 12:26

int*i와 int*i의 차이

DLL을 사용할 수 있도록 C로 작성된 DLL의 헤더 파일을 Delphi로 변환하고 있습니다.

내 질문은 사이의 차이점이 무엇인가 하는 것입니다.

int* i

그리고.

int *i

첫 번째를 로 변환합니다.

i: PInteger;

하지만 저는 델파이의 두 번째 것에 대한 정확한 변환이 무엇인지 잘 모르겠습니다.

제가 알기로는 첫 번째는 간단한 타자 포인터입니다.두 번째는 포인터 변수입니다.하지만 무엇이 다른지는 잘 모르겠습니다.

C에 관한 한 그들은 둘 다 같은 일을 합니다.그것은 기호의 문제입니다. int* i는 int 포인터 유형임을 명확히 보여줍니다. int *i에서는 별표가 단일 변수에만 영향을 미친다는 사실을 보여 줍니다.그렇게int *i, j그리고.int* i, j둘 다 만들 것입니다.iint 포인터로서 그리고.j인트로서

int* i그리고.int *i완전히 동등합니다.

그들은 같습니다.두 가지 다른 스타일은 C 구문의 특이성에서 비롯됩니다.

어떤 사람들은 선호합니다.int* i;왜냐면int*i의 유형입니다.

다른 사람들은 선호합니다.int *i;파서가 유형이 아닌 변수에 별을 붙이기 때문입니다.이 값은 선에서 두 변수를 정의하려는 경우에만 의미가 있습니다.작성 방법에 관계없이:

 int* i,j;
 int*i,j;
 int *i,j;

그것들 각각에서,ij는 단지 int일 뿐인 반면에 int에 대한 포인터입니다.마지막 구문을 사용하면 다음과 같이 더욱 명확해집니다.

 int j, *i;

아니면 가장 좋은 것:

 int *i;
 int j;

당신이 쓸 수 있는 것은 C 구문의 우연입니다.int *i또는int* i아니 심지어는int * i모두 다음과 같이 해석됩니다.int (*i)IOW, 더*형식 지정자가 아닌 선언자에 바인딩되었습니다.이것은 다음과 같은 선언문에서

int* i, j;

오직.i는 포인터로 선언됩니다.j는 정규 int로 선언됩니다.두 가지를 모두 포인터로 선언하려면 다음과 같이 기록해야 합니다.

int *i, *j;

대부분의 C 프로그래머들은T *p와는 반대로T* pa) C의 선언은 객체 중심이 아니라 표현 중심이기 때문에 b) 선언 구문을 더 가깝게 반영합니다.

표현 중심적인 의미의 예로, int에 대한 포인터 배열이 있고 요소에서 정수 값을 얻고 싶다고 가정합니다.i그 값에 해당하는 식은*a[i]그리고 그 표현의 종류는.int따라서, 배열의 선언은

int *a[N];

C 프로그래밍과 관련하여 "선언 모방 사용"이라는 문구를 볼 때, 이것이 의미합니다.

차이가 없습니다.다음과 같이 입력할 수 있습니다.int * i만약 당신이 원한다면, 그것들은 모두 같은 의미입니다: "i는 int의 포인터입니다."

int* i,int * i,int*i,그리고.int *i모두 정확하게 동일합니다.이것은 소스 코드를 구문 분석하는 과정에서 생성된 토큰 스트림의 공백을 무시한 C 컴파일러(및 시스템과 호환되는 C)에서 비롯됩니다.

어떤 사람들은 사용하는 것을 선호합니다.int* i(포인터 지시가 그들 마음속에 있는 유형의 일부로 보이는 것처럼) 코드를 더 깨끗하게 만든다고 생각하는 것.어떤 사람들은 사용하는 것을 선호합니다.int *i(유형이 int이고 "i 포인터"가 있기 때문에) 코드를 더 깨끗하게 만든다고 생각합니다.두 기술 모두 컴파일러가 소스 코드를 통해 실행된 후에는 실제로 어떤 것도 다르게 수행하지 않습니다.의심스러운 경우 기존 스타일을 모방합니다.

똑같은 겁니다.

일부 개발자들은 다음을 선호합니다.int* i표기법은 이러한 방식으로 i의 유형이 분명히 "int에 도달"하기 때문인 반면,int *i가독성이 떨어지는 것 같습니다.

위에서 언급한 사항은 "유형 *"이 가장 타당한 경우를 강조합니다.

하지만 제가 개인적으로 "유형*"이 직관적으로 의미가 있고 더 읽기 쉬운 경우는 포인터 유형에 대한 참조를 전달할 때입니다.변수를 다음과 같이 읽을 때 초보자에게는 직관적이지 않습니다.

int *&x; // what is x here ?

다음과 반대로:

int* (&x); // A reference to a int* type

다음과 같이 다릅니다.

  1. *를 쓰지 않고 한 줄에 많은 포인터를 선언하고 싶을 때마다 int* a,b,c,d를 사용할 수 있습니다. 여기서 a,b,c,d는 모두 정수에 대한 포인터가 됩니다.

  2. 포인터와 일반 변수를 한 줄로 선언하려면 int *a,*b,c,d를 사용해야 합니다. 여기서 a와 b는 정수, c와 d는 정수 변수입니다.

언급URL : https://stackoverflow.com/questions/3770187/difference-between-int-i-and-int-i