C 언어 참고 : 배열이 존재한다고 가정 A [5]의 & A [0]과 A와 & A 차이점

면책 조항 :이 문서는 블로거 원본입니다, 추적 에 의해-SA의 CC 4.0 저작권 계약, 복제, 원본 소스 링크이 문을 첨부 해주세요.
이 링크 : https://blog.csdn.net/weixin_42124234/article/details/101075554

코드에서 첫보기

#include <stdio.h>
int main(void)
{
 int a[5]={1,2,3,4,5};
 int *p1=&a[0]; 
 int *p2=a; 
 //int *p3=&a;//报错
 int (*p3)[5]=&a;
 printf("&a[0]=%X\na=%X\n&a=%X",p1,p2,p3);//以16进制输出变量内存地址
} 

출력 :
여기에 그림 삽입 설명
알 수있는 바와 같이, 쉽게 볼, A [0]하는 , & A 발현 동일한 어드레스이지만 어레이를 저장 및 포인터를 사용한다.

:의 코드 한 쌍의 디버그 뷰를 살펴 보자
여기에 그림 삽입 설명
포인터의 배열이 무엇인지에 대해 먼저 이야기? ; 배열 포인터 본질적 포인터 배열 어드레스 포인터를 가리키고 , 배열의 길이는 3 차원이 상기 수 P3 ()의 우선 순위가 높은 우선 P3 정수의 1 차원 배열에 대한 포인터 스텝 크기. P + 1, P는 데이터 길이가 n의 정수를 교차 할 때 실행된다.

다음은 포인터 변수를 수행 우리는 하나씩 증가 :

#include <stdio.h>
int main(void)
{
 int a[5]={1,2,3,4,5};
 int *p1=&a[0]; 
 int *p2=a; 
 //int *p3=&a;//报错
 int (*p3)[5]=&a;
 printf("&a[0]=%X\na=%X\n&a=%X",p1,p2,p3);//以16进制输出变量内存地址
 printf("\n******************\n");
 p1++;
 p2++;
 p3++;
 printf("&a[0]=%X\na=%X\n&a=%X(在首地址下再增加4个元素*4字节共16字节数)",p1,p2,p3);//以16进制输出变量内存地址
} 

출력 :
여기에 그림 삽입 설명

추천

출처blog.csdn.net/weixin_42124234/article/details/101075554