指針知識梳理9-指針數組
阿新 • • 發佈:2019-04-08
template clas view 元素 pos stat () link sta
1、基本概念
指針數組:本質是數組。數組的每一個元素是指針,數組的每一個元素能夠存儲地址。
2、基本定義
(1)先回想,數組定義基本模型
type a[len];
訪問 數組的每一個成員用 a[i];
每一個成員所占內存大小 sizeof(type);
數組總共占內存大小 ?sizeof(a) = sizeof(type)*len;
(2)指針數組
假設學會了指針,學會了數組,到了這裏就是一個綜合應用的問題。 type 為 char*
char* a[5];
定義數組a,數組每一個元素的類型為 char*。存儲地址,a[i]占4個字節。
那麽能夠寫例如以下代碼:
char b;
char c[10];
a[0] = "hello";
a[1] = (char*)malloc(5);
a[2] = &b;
a[3] = &c[0];
type 為 int*
int* a[5];
定義數組a,數組每一個元素的類型為 int*,存儲地址,a[i]占4個字節。
int b;
int c[10];
a[0] = &b;
a[1] = (int*)malloc(sizeof(int)*5);
a[2] = &c[0];
3、綜合一維數組名的含義
參照1,指針與一維數組:http://blog.csdn.net/xiaoliu0518/article/details/32710665
參照2,指針的指針:http://blog.csdn.net/xiaoliu0518/article/details/33329833
模型:
type a[10];
type *p;
p+i ?偏移的地址是 i*sizeof(type)
p = &a[0];
p = a;
*(p+i) = p[i];
*(a+i) = a[i];
--------------------------------------------------
假設type為char
char a[10];
char* p;
p = a;
p+i 地址偏移 i個字節,*(p+i)訪問1個字節
---------------------------------------------------
假設type為char*
char* a[10];
char** p;
p = a;
p+i 地址偏移 4*i個字節。*(p+i)訪問4個字節
3、綜合應用
剛開始學習的人一定要多寫多練。
指針數組:本質是數組。數組的每一個元素是指針,數組的每一個元素能夠存儲地址。
2、基本定義
(1)先回想,數組定義基本模型
type a[len];
訪問 數組的每一個成員用 a[i];
每一個成員所占內存大小 sizeof(type);
數組總共占內存大小 ?sizeof(a) = sizeof(type)*len;
(2)指針數組
假設學會了指針,學會了數組,到了這裏就是一個綜合應用的問題。
依照以上模型:
----------------------------------------------------------------
char* a[5];
定義數組a,數組每一個元素的類型為 char*。存儲地址,a[i]占4個字節。
那麽能夠寫例如以下代碼:
char b;
char c[10];
a[0] = "hello";
a[1] = (char*)malloc(5);
a[2] = &b;
a[3] = &c[0];
a[4] = c;
int* a[5];
定義數組a,數組每一個元素的類型為 int*,存儲地址,a[i]占4個字節。
int b;
int c[10];
a[0] = &b;
a[1] = (int*)malloc(sizeof(int)*5);
a[2] = &c[0];
a[3] = c;?
請畫內存圖
3、綜合一維數組名的含義
參照1,指針與一維數組:http://blog.csdn.net/xiaoliu0518/article/details/32710665
參照2,指針的指針:http://blog.csdn.net/xiaoliu0518/article/details/33329833
模型:
type a[10];
p+i ?偏移的地址是 i*sizeof(type)
p = &a[0];
p = a;
*(p+i) = p[i];
*(a+i) = a[i];
--------------------------------------------------
假設type為char
char a[10];
char* p;
p = a;
p+i 地址偏移 i個字節,*(p+i)訪問1個字節
---------------------------------------------------
假設type為char*
char* a[10];
char** p;
p = a;
p+i 地址偏移 4*i個字節。*(p+i)訪問4個字節
3、綜合應用
#include <stdio.h>
int main()
{
char *a[5];
char b[10] = "lilei";
char c[10];
char d = ‘m‘;
char **p = a;
a[0] = "hello";
a[1] = (char*)malloc(5);
//安全檢查。。
a[2] = b;
a[3] = c;
a[4] = &d;
strcpy(a[1],"bye");
strcpy(a[3],a[2]);
for(i = 0;i<4;i++)
{
printf("a[%d] : %s\n",i,a[i]);
printf("a[%d] : %s\n",i,p[i]);
printf("a[%d] : %s\n",i,*(p+i));
}
printf("a[4]:%c\n",*a[4]);
printf("a[4]:%c\n", *(*(p+4)) );
}
剛開始學習的人一定要多寫多練。
指針知識梳理9-指針數組