歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux技術

數組指針和指針數組

數組指針

int (*p)

;

首先P是一個指針,指向一個整型一維數組,這個數組的長度是n,也就是P的步長,

如果P++,那麼P就跳過n長度到下一個數組,

如果用指針定義一個二維數組

int a[3][4];

int (*p)[4]//定義一個數組指針,該指針指向一個有4個元素的一維數組

p = a//將二維數組中首個一維數組的地址給指針,就是a[0]或者&a[0][0]

p++//指針P指向的下一個一維數組就是a[1][ ];

所以數組指針是指向一維數組的指針,也就是行指針

輸入二維數組的方法可以是:

for(i = 0 ; i < MAX_SIZE;i++)

//scanf("%s",*p + i)

//scanf("%s",&(*p)[i])

數組指針的使用條件是:函數傳參的時候

一維數組名傳參:用的是元素的指針

void print_ptr(char *ptr)/void print_ptr(char ptr[100])

二維數組名傳參:用的是一維數組的指針

void print_prt(char (*ptr)[100])/void print_prt(char **ptr)

三位數組名傳參:用的是二維數組的指針

void print_ptr(char (*ptr)[3][100])/void print_ptr(char ***ptr)

//對一維數組的數組名取地址= 數組的地址

//對一維數組的地址取值= 數組元素的首地址

指針數組

int *p

:該數組中有n個指針類型的元素。

如要將二維數組賦給一指針數組:

int *p[3];

int a[3][4];

p++; //該語句表示p數組指向下一個數組元素。注:此數組每一個元素都是一個指針

for(i=0;i<3;i++)

{

初始化:因為定義一個指針數組,數組中的指針都是野指針,所

以要進行內存空間的分配

p[i] = (int *)malloc(sizeof(int));

p[i]=a[i];

}

這裡int *p[3] 表示一個一維數組內存放著三個指針變量,分別是p[0]、p[1]、p[2]

所以要分別賦值。

例如:

用指針數組遍歷字符串

char *ptr[3] = {"hello1","hello2","hello3"};

for(i = 0;i < 3;i++)

{

printf("ptr[%d] = %s\n",i,ptr[i]);

}

函數傳參

void print_ptr(char **ptr)//因為數組裡存放的是指針,所以形參必須用指針的針

來接參,傳過來的實參是:指針變量或者是指針數組。

{

int i;

for(i = 0; i < 3;i++)

{

//printf("%s\n",ptr[i]);

// printf("%s\n",*(ptr + i));

}

}

_

數組指針只是一個指針變量,C語言裡一般專門用來指向二維數組的,它占有內存中一

個指針的存儲空間。

指針數組是多個指針變量,以數組形式存在內存當中,占有多個

指針的存儲空間。

Copyright © Linux教程網 All Rights Reserved