C,C++——指針和數組

一 指針和一維數組的關係

  • 指向數組的指針變量稱爲數組指針變量
  • 數組名是數組首個元素的地址。 數組名可以看作是一個指針常量,不可修 改。
  • 其值爲首個元素的地址值。如下用指針變量訪問數組元素
    int a[]={12,22,32,42,52,62,72,82,92,102};
  • int *pa=a; //指針變量p指向數組a的首地址 。pa等價於a
    在這裏插入圖片描述
  • 用指針變量對數組元素的訪問可以採用下標形式和指針形式兩種
    下標形式: p[i]
    指針形式:*(p+i)
    舉例
 for(int i=0;i<5;i++) 
 {
    //使用數組方式
   cout << p1[i] << " ";
   cout << b[i] << " "; 
    //使用指針運算符
   cout << *(p1+i) << " ";
   cout << *(b +1) << " "; 
      }

二 指針和多維數組關係

  • C++允許把一個二維數組分解爲多個一維數組來處理。數組名是首個元素 (一維數組)的地址。如下所示定義一個二維數組a
 int a[3][4]=
 {
    {11,12,13,14}, 
    {21,32,23,24},
    {31,32,33,34},
   }

二維數組a可以分解爲一維數組a[0],a[1],a[2]。如下圖所示
在這裏插入圖片描述

數組指針

  • 數據類型爲數組的指針,稱爲數組指針。用於存放數組地址的指針
  • 二維數組指針變量的定義: 數據類型名 (*指針變量名)[維數1];
  • n維數組指針變量的定義:數據類型名 (*指針變量名)[維數n-1]…[維數1];
  • 注意:“(*指針變量名)”兩邊的括號不可少,如缺少括號則表示是指針數 組。
    定義:
    int (*p)[4];
    表示一個指向二維數組的指針變量,該二維數組的列數爲4
    int (*p)[4]=a;
    p是一個指針變量,指向二維數組a。其值等於aa[0]、或&a[0][0]
    取值
    *(ptr+i):表示第i個一維數組 首個元素的地址(類型降級 int[] * —int *)
    *(ptr+i)+j :表示第i個一維數組 的第j個元元素的地址
    *(*(ptr+i)+j):表示二維數組名[i][j]
int a[3][4] = { {11,12,13,14}, {21,32,23,24}, {31,32,33,34}, };

	int(*ptr)[4] = a;//ptr 和 a,等效
	for(int i=0;i<3;i++)
	{
		for(int j=0;j<4;j++)
		{
			//cout << ptr[i][j]<<" ";
			cout << *(*(ptr + i) + j) << " ";
			//cout << a[i][j] << " "; 
			//cout << *(*(a + i) + j) << " "; 
		} 
		cout << endl;
	}

指針給數組賦值

int a[3][4];
	int *pi = a[0];
	for (int i = 0; i < 3; i++, pi += 4)
	{
		for (int j = 0; j < 4; j++)
		{
			pi[j] = i * j;
		}
	}
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 4; j++)
		{
			printf("pi[%d][%d]=%d\n", i, j, a[i][j]);
		}
	}

指針數組

數據元素均爲指針類型的數組,稱爲指針數組。定義如下
類型名* 數組名[長度] = {0};
int *p[4];
表示p是一個指針數組,4個下標變量p[0]、p[1]、p[2]、p[3]均爲指針變 量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章