14位配列とポインタ

アドレッシング演算子

* ポインタ演算子

アドレッシング演算子と* ポインタ演算子

これは、結合右から左に、同じ優先順位を持っています。

int型;

int型* p =&;

*&A ----> A

&* P ----> P

 

int型* p =&;  

ポインタ代入:

割付:それが宣言されたときにint * p =&;  

代入することにより最初の文: int型A; int型* p型、p型&= A;

* P 個人がデータである場合に発生します。

int型* P データ型が先行。

 

1次元配列とポインタ。

図1に示すように、一次元配列のアドレス。

これは、配列の最初の要素のアドレスです。

 

1つの#include <stdio.hの>
 2  
3  INT メイン()
 4  {
 5  int型 ARR [ 5 ]。
6のprintf(" %d個の\ n "、&​​ARR [ 0 ])。
7  
8  リターン 0 9 }

 

ポインタの定義は、一次元配列の最初のアドレス&[0] ポインタ与えるPTRを、前記PTR 配列へのポインタを[5]

配列の配列名は、配列の最初のアドレスです。ARR [5]&ARR [0 ] == ARR == PTR

 

図2に示すように、入力および出力のための一次元アレイ。

ポインタは変更されません。

 

1つの#include <stdio.hの>
 2  
3  INT メイン()
 4  {
 5      // int型ARR [5]。
6  
7      // のための(INT i = 0; iは<5; iは++)
 8      // {
 9つの         // ARR [I] = I + 1。
10      // }
 11  
12  
13      // (; iが5 <I ++は、I = 0の整数)のための
 14      // {
 15          // のprintf([I] ARR、I "[%のD] =%dは\ nをARR" );
16      // } 
17  
18  
19      int型 ARR [ 5 ]。
20      INTARR = P *;    // のint *のP =&ARR [0]; 
21が 
ある22      のためにint型 I = 0 ;私は< 5。 私は++)// 私は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 ;私は< 5。 私は++ 30      {
 31である          のprintf("ARR [%のD] =%Dを\ n "、I、*(P + I));
 32      }
 33 }

 

* 一人で他のどのような状況へのポインタである文で表現した場合のみ*   ポインタ演算子と述べています。

 

Bは、配列のインデックスがポインタである pが変更され、それは印刷前に置かれなければならないP 最初のアドレスの配列にリダイレクトします。

1つの int型 ARR [ 5 ]。
2  INT * P = ARR。   // int型* p =&編曲:[0]; 
3  
4   
5  / * *******************************
 6  1:* P - ARR [0] 1
 7  2 *(p + 1) - [1] 2 ARR
 8  3 *((P + 1)+1) - [2] 3 ARR
 9  *************** **************** * / 
10  
11のprintf(" 赋值之前:%Dを\ n " 、P);
12  
13  のためにint型 I = 0 ; iが< 5 ; iが++)// 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 ;私は< 5 ; I ++は23です {
 24      のprintf(" ARR [Dの%] D =%の\のN- " 、I、ARR [I]);
 25  }
 26は、 
27   
28 [P =&ARR0 ]; // Pリダイレクトアレイの先頭アドレス
29のprintf(" 印刷前:%D \ N- " 、P);
 30  
31は  
32  のためにint型 I = 0 ;私は< 5。 私は++ 33である {
 34である      のprintf(" ARR [Dの%] D =%\ N- "、I、Pの* ++ );
 35  }
 36  
37のprintf(" 印刷後:%D \ N- "、P)。

 

 

推奨事項:満たすポインタ: 1 、型へのポインタ?  2 、ここで、ポインタは?  3 ポインタ自身のタイプ?

 

第二に、2次元配列とポインタ。

図1に示すように、二次元アレイに対処。

 

 

 

ファースト住所:

&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