재밌는 코드 하나.
1258 단어 code
int i, arr[10], *p=arr;
분리하면 다음과 같다.
int i;
int arr[10];
int *p = arr;
여기 int*p = arr;다음과 같습니다.
int *p;
p = arr;
즉, 값을 부여할 때 *p는 바늘 변수일 뿐이고 p=arr가 그 값을 부여하는 문장이다.
초기화 안의 * 번호는 이 변수가 바늘 형식인 int*a를 표시하고 a는 (int*) 형식으로 초기화에 있지 않으며 *a는 가리키는 메모리 단원에 저장된 값을 표시합니다
*p는 수조의 첫 번째 원소, 즉arr[0]를 나타낸다.
int main()
{
int **p;
int a;
*p = &a;
printf("%x
", p);
}
//
int main()
{
int *p;
int a;
p = &a;
printf("%x
", p);
}
//
이것도 제가 프로그래밍을 하면서 겪은 문제예요.
int main()
{
int **p2;
int *p1;
p2=&p1; //p2 , *p2 ,
//
int a;
*p2 = &a;
printf("%x
", p1);
return 0;
}
바늘을 초기화하지 않고 값을 부여하는 작업을 하면 위험합니다. 또한 초기화하더라도 유효한 주소를 초기화해야 합니다. 그렇지 않으면 오류가 발생할 수 있습니다. 왜냐하면 **p는 2차원 바늘이기 때문입니다. 당신은 *p=&a를 쓰십시오.*p를 초기화할 뿐입니다. 그러나 *p를 초기화하지 않았기 때문에 오류가 발생했습니다.**p는 2차원 포인터이기 때문에 2차원을 가리키는 변수입니다
말하자면 *p는 하나의 메모리를 가리키고 **p는 다른 메모리를 가리키며 당신은 *p만 값을 주고 **p는 값을 주지 않습니다.그래서 가방이 초기화 오류가 없었어요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
소스 코드가 포함된 Python 프로젝트텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.