數(shù)組指針和指針數(shù)組

1.數(shù)組名

數(shù)組首元素的地址和數(shù)組地址是兩個(gè)不同的概念

  • 數(shù)組名代表數(shù)組首元素的地址,它是個(gè)常量.

  • 變量本質(zhì)是內(nèi)存空間的別名,一定義數(shù)組,就分配內(nèi)存,內(nèi)存就固定了。所以數(shù)組名起名以后不能被修改了。

  • 數(shù)組首元素的地址和數(shù)組的地址值相等。

1.1怎么樣得到整個(gè)一位數(shù)組的地址?

int a[10];
printf("得到整個(gè)數(shù)組的地址a:%d\n",&a);
printf("數(shù)組的首元素的地址a:%d\n,a);

2.數(shù)組類(lèi)型

數(shù)組的類(lèi)型由元素類(lèi)型和數(shù)組大小共同決定

int array[5] 的類(lèi)型為 int[5]
#include <stdio.h>
/*
typedef int(MYINT5)[5];
typedef float(MYFLOAT10)[10];

數(shù)組定義:

MYINT5 iArray;        等價(jià)于 int iArray[5];
MYFLOAT10 fArray;     等價(jià)于 float fArray[10];

*/
/*定義 數(shù)組類(lèi)型,并用數(shù)組類(lèi)型定義變量*/

int main(void)
{
  typedef int(MYINT)[5];

  int i = 0;

  MYINT array;

  for(i = 0 ; i < 5; i++)
   {
        array[i] = i;
   }
  
   for(i = 0;i < 5;i++)
    {
     printf("%d ",array[i]);
    }
   return 0;
}

3.數(shù)組指針和指針數(shù)組

3.1指針數(shù)組

char   *point_array[4];
(char *)point_array[4];

指針數(shù)組,是一個(gè)數(shù)組,里面的每一個(gè)元素都是一個(gè)指針。(多個(gè)指針)

1.png

3.2數(shù)組指針

int (*array_point)[4];

是一個(gè)指針,指向一個(gè)數(shù)組

2.png

指針本是一種類(lèi)型,但又說(shuō)什么類(lèi)型的指針,只不過(guò)是說(shuō)指針?biāo)赶虻臄?shù)據(jù)是什么類(lèi)型而已。那么指向數(shù)組類(lèi)型的指針,就只好叫數(shù)組指針

3.3定義數(shù)組指針

int a[10]; // a的類(lèi)型是一個(gè)指向int類(lèi)型的指針

數(shù)組名a是數(shù)組首元素的起始地址,但并不是數(shù)組的起始地址。

&a;  //&a的類(lèi)型是一個(gè)指向數(shù)組int[10]類(lèi)型的指針

通過(guò)將取地址符&作用域數(shù)組名可以得到整個(gè)數(shù)組的起始地址

1)通過(guò)數(shù)組類(lèi)型定義數(shù)組指針:
typedef int(ArrayType)[5]; //定義類(lèi)型ArrayType為int[5]類(lèi)型

ArrayType* pointer;//那么指向ArrayType的指針就是指向int[5]類(lèi)型的指針

2) 通過(guò)數(shù)組指針定義數(shù)組指針
typedef int (*MyPointer)[5];   //定義類(lèi)型MyPointer為指向int[5]類(lèi)型的指針

MyPointer myPoint;   //那么?用這種類(lèi)型的指針定義的便利都是指向int[5]類(lèi)型的

3)直接定義
int (*pointer)[5];

3.4數(shù)組指針有什么用?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void test()
{
  //  int //0維數(shù)組,一級(jí)指針
 //   int[10] //一維數(shù)組,二級(jí)指針
 //   int[10][20]//二維數(shù)組,三級(jí)指針
   int a[3][4];
    //a是一個(gè)指針,指向此二維數(shù)組首元素(int[4])的地址,int (*p)[4] --->二級(jí)指針,指向一維數(shù)組
    //&a也是一個(gè)指針,指向此二維數(shù)組(int[3][4])的地址,int(*p)[3][4] --->三級(jí)指針,指向一個(gè)二維數(shù)組

    //一個(gè)數(shù)組指針如果是幾級(jí)指針,就是指向比他低一個(gè)維度的數(shù)組
}


int main(int argc, char const *argv[])
{
    //定義一個(gè)指針數(shù)組
    //char *pointer_array[4] = {NULL,NULL,NULL,NULL};//在棧上
    char *pointer_array[4] = {NULL};//數(shù)組,一定要記得加大括號(hào)
    int i = 0;
    for (i = 0; i < 4; ++i)
    {
        pointer_array[i] = malloc(100);
    }
    
    //定義一個(gè)數(shù)組指針
    //方法一:
    //通過(guò)數(shù)組類(lèi)型定義一個(gè)數(shù)組指針
    typedef int(ARRAY_CHAR_4)[4];
    ARRAY_CHAR_4 array = {0};//int[4]類(lèi)型 array是數(shù)組首元素的地址
    ARRAY_CHAR_4 *p = NULL; //數(shù)組的地址 (int[4]) *p = NULL

    p = &array;//array int *   &array-->(int[4])*

    for (i = 0; i < 4; ++i)
    {
        (*p)[i] = i;//等價(jià)于 array[i] = i;
      //  p[i] = i;為int[4] *(p+i)==p[i]
    }

    for (i = 0; i < 4; ++i)
    {
        printf("%d\n",array[i]);
    }
    
    int size = 0;
    size = sizeof(ARRAY_CHAR_4);
    printf("ARRAY_CHAR_4 = %d\n",size);//輸出16

    //方法二:
    //數(shù)組指針
    typedef int(*ARRAY_CHAR_4_POINTER)[4];//一個(gè)int,指向int[4]

    ARRAY_CHAR_4_POINTER array_pointer = &array;
    
    size = sizeof(ARRAY_CHAR_4_POINTER);
    printf("ARRAY_CHAR_4_POINTER = %d\n",size);//輸出4

    for (i = 0; i < 4; ++i)
    {
        (*array_pointer)[i] = i;
    }

    for (i = 0; i < 4; ++i)
    {
        printf("%d\n",array[i]);
    }

    //方法三
    int(*array_p)[4] = NULL//直接定義一個(gè)數(shù)組指針
    array_p = &array;

    for (i = 0; i < 4; ++i)
    {
        (*array_p)[i] = i;
    }
    
    for (i = 0; i < 4; ++i)
    {
        printf("%d\n", array[i]);
    }

    return 0;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 指針是C語(yǔ)言中廣泛使用的一種數(shù)據(jù)類(lèi)型。 運(yùn)用指針編程是C語(yǔ)言最主要的風(fēng)格之一。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu); ...
    朱森閱讀 3,606評(píng)論 3 44
  • 關(guān)鍵詞:數(shù)組的類(lèi)型、定義數(shù)組類(lèi)型、數(shù)組指針、 指針數(shù)組 0.指針概念復(fù)習(xí) 指針的本質(zhì)是變量,其內(nèi)存中存儲(chǔ)的值是另一...
    編程半島閱讀 376評(píng)論 0 0
  • 轉(zhuǎn)載請(qǐng)注明在糾結(jié)指針數(shù)組和數(shù)組指針時(shí)無(wú)意發(fā)現(xiàn)的小細(xì)節(jié)??偹愀闱鍞?shù)組指針和指針數(shù)組。 數(shù)組指針定義 int (*p)...
    cseeing閱讀 387評(píng)論 0 0
  • 再窮不能窮教育,再苦不能虧了自己的嘴巴。作為一個(gè)吃貨,雖有吃遍天下可吃之物的勇氣,但是在國(guó)內(nèi)的食品安全大家有目共睹...
    空靈一月閱讀 372評(píng)論 0 5
  • 或許我們當(dāng)今世界的不幸就在于此——世界上最高的智慧隨處可見(jiàn)、唾手可得,但是一般汲汲于名、孜孜求利的蒼生卻視若無(wú)睹。...
    alilili楊閱讀 329評(píng)論 0 0

友情鏈接更多精彩內(nèi)容