및 주소 연산자
* 포인터 연산자
및 주소 연산자와 * 포인터 연산자
이 바인딩을 오른쪽에서 왼쪽으로, 동일한 우선 순위가 있습니다.
를 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
蓝色的加法就加一维数组的字节数 橙色的加法加数据类型的字节数
通过行地址去找到n行m列的元素。
&a[n][m] a[n]+m (关键是要搞清楚 以一维数组老做判断 还是以整体的二维数组来进行判断 )
//n行m列的元素
*(a[n]+m)
*(*(a+n)+m) //a+n a[n] *(a+n) a[n]+m
下节课:
字符串和指针(数组和指针) 指针类型的数组
函数和指针
指针总结
结构体
预处理
位运算
数据结构
写项目