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
둘 다 만들 것입니다.i
int 포인터로서 그리고.j
인트로서
int* i
그리고.int *i
완전히 동등합니다.
그들은 같습니다.두 가지 다른 스타일은 C 구문의 특이성에서 비롯됩니다.
어떤 사람들은 선호합니다.int* i;
왜냐면int*
i의 유형입니다.
다른 사람들은 선호합니다.int *i;
파서가 유형이 아닌 변수에 별을 붙이기 때문입니다.이 값은 선에서 두 변수를 정의하려는 경우에만 의미가 있습니다.작성 방법에 관계없이:
int* i,j;
int*i,j;
int *i,j;
그것들 각각에서,i
j는 단지 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* p
a) 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
다음과 같이 다릅니다.
*를 쓰지 않고 한 줄에 많은 포인터를 선언하고 싶을 때마다 int* a,b,c,d를 사용할 수 있습니다. 여기서 a,b,c,d는 모두 정수에 대한 포인터가 됩니다.
포인터와 일반 변수를 한 줄로 선언하려면 int *a,*b,c,d를 사용해야 합니다. 여기서 a와 b는 정수, c와 d는 정수 변수입니다.
언급URL : https://stackoverflow.com/questions/3770187/difference-between-int-i-and-int-i
'programing' 카테고리의 다른 글
Duplicate User Form in Excel VBA (0) | 2023.06.18 |
---|---|
MySQL: 다른 테이블의 값에서 테이블의 기존 데이터 "패치" (0) | 2023.06.18 |
웹 API에서 요청과 일치하는 여러 작업이 발견되었습니다. (0) | 2023.06.18 |
python 사전을 csv 파일로 작성하려면 어떻게 해야 합니까? (0) | 2023.06.18 |
C의 for(;;) 루프에서 여러 변수를 선언하려면 어떻게 해야 합니까? (0) | 2023.06.18 |