程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> c語言的數組指針與指針數組,c語言數組指針

c語言的數組指針與指針數組,c語言數組指針

編輯:關於C語言

c語言的數組指針與指針數組,c語言數組指針


1. 數組指針:指向數組的指針是數組指針

先看下面一段代碼:

#include <stdio.h>

int main(void)
{
    int m[10];

    printf("m = %p, &m = %p\n", m, &m);
    printf("m + 1 = %p, &m + 1 = %p\n", m + 1, &m + 1);

    return 0;
}

運行上面的代碼得到的結果如下圖:

上面代碼中&m是指向數組的指針,也就我們說的數組指針,它在m在數值上是完全相等的,都指向的是同一段內存的起始地址。但是它們的類型確是不同的。其中m是 int *型的指針;而&m指向的是int m[10]這樣一個數組,是一個數組指針,因此m +  1 相當於加上 sizeof(int),由上圖可以計算(0x0028FEFC - 0x0028FEF8) =  4; 而&m + 1相當於加上sizeof(int[10]),由上圖中的計算(0x0028FF20 - 0x0028FEF8) = 40。

可以有如下定義:

int (*p)[10] = &m; 這裡p就是一個數組指針,並且這裡(*p)的括號是必須的,()的優先級高於[],因此p首先是一個指針,然後指向的是int [10]的數組。

 

2. 指針數組:由多個指針組成的數組是指針數組

int *p[10]; 這裡可以和上面數組指針做對比。p首先是一個數組,然後類型是指針,因此p是指針數組(含有10個指針,例如p[0]、p[1]。。。p[9],每個指針的類型為int *),它的每個變量都可以用來存放地址。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved