14 - 배열과 포인터

주소 연산자

* 포인터 연산자

주소 연산자와 * 포인터 연산자

이 바인딩을 오른쪽에서 왼쪽으로, 동일한 우선 순위가 있습니다.

를 int로;

INT * p = & A;

* & A ---->을

* P & ----> P

 

INT * p = & A;  

포인터 할당 :

이 선언되었을 때 : 할당 INT의 * P는 = & A;  

할당에 의해 먼저 문 : INT A를, INT * ρ-, ρ-& = A;

* P 개별 데이터 인 경우 발생한다.

INT * P 데이터 타입에 의해 선행.

 

배열과 포인터를 한 차원.

(1) 1 차원 배열 주소.

이는 어레이의 첫 번째 요소의 주소이다.

 

1 #INCLUDE <STDIO.H>
 2  
3  INT 주 ()
 -4-  {
 5  INT의 도착 [ 5 ];
6 의 printf ( " % D \ 없음 " , 도착 [ 0 ]);
7  
8  복귀  0 ;
9 }

 

포인터의 정의의 1 차원 배열의 선두 어드레스 및은 [0] 포인터 제공 PTR를 , 상기 의 PTR 배열 포인터 A는 [. 5] .

어레이 배열 이름은 배열의 첫 번째 어드레스이다. 도착 [5] 도착 [0 ] == 도착 == PTR

 

(2) 입력 및 출력에 대한 1 차원 배열.

A, 포인터가 변경되지 않습니다.

 

1 #INCLUDE <STDIO.H>
 2  
3  INT 주 ()
 -4-  {
 5      // INT의 도착 [5];
6  
7      // 용 INT (I = 0; i가 <5; 내가 ++)
 8      // {
 9 개          // 도착 [I] = 1 + 1;
10      // }
 11  
12  
13      //는 위해 (나는 <5, I = 0 int로 난 ++)
 14      // {
 15          // 의 printf ( "[%의 D] = % D \ 없음을, 언"I, 도착 [I] );
16      // } 
17  
18  
19      INT의 도착 [ 5 ];
20      INTARR = P *;    // INT의 *를 p = & ARR [0] 
(21)은  
(22)      에 대해 ( int로 I = 0 ; I는 < 5. , I는 ++) // I 0-4 
23된다      {
 24          // 긴 포인터 변수 p가 완성 선언 후 주소 * p는 변수의 주소는 지적 동행하는 것입니다. 
25          * (P + I)가 = I는 + 1이다. ] // - [. 1] ARR [0] P *의 ARR의 - (*. P + 1) ARR [2] - * (P + 2) 
(26)이다      }
 27  
28       
(29)      에 대한이 ( int로 I = 0 ; I는 < 5. ; I ++가 )
 30      {
 31은          의 printf ( "도착 [%의 D] D = % \ 없음 " , I * (P + I))
 32      }
 33 }

 

* 만 혼자 다른 상황에 대한 포인터입니다 성명에서 표현 된 경우 *   말했다 포인터 연산자.

 

B는 어레이 인덱스가 포인터 (P)가 변경되며, 이는 인쇄 전에 넣어해야 P 첫 번째 주소의 재 배열한다.

1 개  INT 도착의 [ 5 ];
2  INT * P는 =의 도착;   // INT * p = & 도착 [0]; 
3  
4   
5  / * *******************************
 6  1 : * p가 -, 언 [0] (1)
 (7)  (2) * (p + 1) - 도착 [1] 2
 8  3 * ((p + 1) +1) - 도착 [2] 3
 9  *************** **************** * / 
10  
(11) 의 printf ( " 赋值之前% D \ 없음 " , P);
12  
(13)  에 대해 ( int로 I = 0 ; i가 < 5 ; 내가 ++) // I에게 0-4 
14 {
 15      * p를 ++ = I는 + 1이다. ] // 1-5 p는 변경 배열로 복사 할 수  
 16      // . + 최초의 계산식 P ++ 1 P이고 식의 값
 . 17      @ ++ P는 P + 1 다음 계산치 식 수득 
18이다  }
 . 19  
(20)이다 의 printf ( " 이 할당 이후는 % D \ N- ' , P)
 (21)가  
22 인  위해 ( int로 I = 0 ; I는 < . 5 , I는 ++ )
 (23)는  {
 24      인 printf ( " ARR는 [D %의은 = % \ N- D " , I는 ARR [I]);
 (25)  }
 (26)는  
27   
(28) P = ARR [0 ] // 는 P 재 배열의 선두 어드레스 
29 의 printf ( " 인쇄 전에 % D \ N- ' , P),
 30  
(31)는   
32   ( int로 I = 0 ; I는 < 5. , I는 ++ )
 (33)가  {
 34은      의 printf ( " ARR [D %의] D = % \ N- ' , I, P의 * ++ );
 35  }
 36  
37 의 printf ( " 인쇄 후 % D \ N- ' , P);

 

 

권장 사항 : 충족 포인터 : 1 , 포인터는 입력합니다?  2 , 어디 포인터 포인트?  3 포인터 자신의 유형?

 

둘째, 2 차원 배열과 포인터.

1, 2 차원 배열을 다룬다.

 

 

 

첫 번째 주소 :

&a[0][0]  a[0]  &a[0]  a   &a

 

行地址:

1、0行的地址就是首地址

2、1&a[1][0]   a[1]   &a[1]  a+1

3、第2&a[2][0]   a[2]   &a[2]  a+2

4、第i行  &a[i][0]    a[i]   &a[i]   a+i

蓝色的加法就加一维数组的字节数 橙色的加法加数据类型的字节数

 

通过行地址去找到nm列的元素。

&a[n][m]   a[n]+m  (关键是要搞清楚 以一维数组老做判断 还是以整体的二维数组来进行判断 )

 

//nm列的元素

*(a[n]+m)

*(*(a+n)+m)   //a+n  a[n]  *(a+n)   a[n]+m

 

下节课:

字符串和指针(数组和指针)  指针类型的数组

函数和指针

指针总结

结构体

预处理

位运算

数据结构

写项目

 

 

 

추천

출처www.cnblogs.com/tiantiancode/p/11131766.html