指针与数组总结
總結(jié):
一維數(shù)組與指針
type ?a[N]];
sizeof(a[0])==>?
sizeof(a)==> N*type?
sizeof(&a)==> 4
a[0]+1==>值加1
&a[0]+1 ==>加一個(gè)元素
a+1 ==> 加一個(gè)元素,+type?
&a+1 ==> 加一個(gè)數(shù)組
type *p = a;
sizeof(p)==> ? 4
sizeof(*p)==> ?type?
sizeof(&p)==> ?4
p+1 ? ? ==>指向元素,加元素長(zhǎng)度
*p+1 ? ?==>取值 ?+1,值加1
&p+1 ? ?==>+4,指向p后面空間
取值:a[i] == p[i] == *(p+i);
type (*p)[N] = &a;
sizeof(p)==> 4 ?數(shù)組的地址
sizeof(&p)==> 4 ?p本身的地址
p+1==> p存放一維數(shù)組地址,+1加一個(gè)一維數(shù)組長(zhǎng)度,加一行, type*N?
&p+1==> &p是p本身的地址,本身4個(gè)字節(jié),指向p后面空間
*p+1 ==> a+1 加一個(gè)元素
取值:a[i] = *(a+i) = *(*(p)+i) = (*p)[i]?
二維數(shù)組與指針
type a[M][N];
?sizeof:
sizeof(a[0][0]) ==>type
sizeof(a[0]) ? ==> N*type?
sizeof(a) ?===>M*N*type?
sizeof(&a[0][0]) ==>4
sizeof(&a[0]) ?==> 4
sizeof(&a) ? ==> 4
?+1:
a[0][0]+1 ==> 值加1 。?
a[0]+1==> 存放元素地址,加一個(gè)元素長(zhǎng)度 ,列地址 type 同&a[0][0]+1?
a+1 ? ==> 存放一維數(shù)組地址,加一維數(shù)組長(zhǎng)度,行地址, type*N ?&a[0]+1?
&a[0][0] + 1 ?元素地址
&a[0] + 1 ? ? 一維數(shù)組地址
&a + 1 ? ? ? ?二維數(shù)組地址
?取值:a[i][j]==
*(a[i]+j)=*(*(a+i)+j)
?指針:
type *p = a[0]; // = &a[0][0]
sizeof()
+1?
取值:a[i][j] = *(p+i*N+j) = p[i*N+j];
數(shù)組指針:
type (*p)[N] = a;//=&a[0];
sizeof(p)==> 4 ? 存放一維數(shù)組地址的指針
sizeof(&p)==> 4 ?p本身的地址
p+1==> p存放一維數(shù)組地址,+1加一個(gè)一維數(shù)組長(zhǎng)度,加一行, type*N?
&p+1==> ?&p是p本身的地址,本身4個(gè)字節(jié),指向p后面空間
*p+1 ==> p存放數(shù)組地址,*p得到數(shù)組名,*p+1,加一個(gè)元素.?
對(duì)行地址取值得到列地址,列地址+1加一個(gè)元素
取值:a[i][j]
== p[i][j] = *(p[i]+j) = *(*(p+i)+j);
a是行地址常量,存放一維數(shù)組的地址,同時(shí)代表整個(gè)數(shù)組M*N*type個(gè)字節(jié)。
p是行地址變量,存放一維數(shù)組的地址,代表本身4個(gè)字節(jié).
數(shù)組指針
type (*p)[N]; ?--> type ?a[N];
type *(*p)[N]; -->type * a[N];
指針數(shù)組
type *a[N];
sizeof(a)==> 4*N
sizeof(a[0])==> 4?
sizeof(&a)==> ?4
sizeof(&a[0])==> ?4?
a[0] + 1 ?==> ? 元素值加1,元素值是type型地址,指向一個(gè)type型數(shù)據(jù),+1加一個(gè)數(shù)據(jù)長(zhǎng)度,即type長(zhǎng)度
a+1 ==> ? 加一個(gè)數(shù)組元素的長(zhǎng)度,+4
&a+1 ==> ?一維數(shù)組地址,+1加一個(gè)一維數(shù)組長(zhǎng)度, 4*N?
取值: a[i] = *(a+i);
*a[i] = *(*(a+i));
type *(*p)[N] = &a;
數(shù)組指針與指針數(shù)組比較
type (*p)[N] ? PK ? ? type ?*a[N];
字符串與指針數(shù)組
多級(jí)指針
type ?a;
type ?*p = &a;
sizeof(p) ==> 4?
&p+1 ==> +4?
p+1 ==> +type?
type **pp = &p;
sizeof(pp)==>4
sizeof(*pp) ==> 4?
sizeof(&pp) ==>4?
pp+1 ==> +4
一級(jí)指針+1加的是目標(biāo)類型長(zhǎng)度,+1增加type長(zhǎng)度
二級(jí)指針+1加的也是目標(biāo)類型長(zhǎng)度,二級(jí)目標(biāo)是一個(gè)指針,+1增加4個(gè)字節(jié)
2.1指針與字符串題 http://note.youdao.com/noteshare?id=d39d0b93fb98eccc3feb7f9e84999ea8
/* ***********************************************************************/
函數(shù):
函數(shù)定義:
函數(shù)聲明:
函數(shù)調(diào)用:
函數(shù)傳參:
值傳遞
址傳遞
函數(shù)返回值:
返回和傳參取數(shù)據(jù)。
嵌套與遞歸函數(shù):
指針函數(shù):
int fun(int x, char y);
int *fun(int x, char y);
char *fun(int x, char y);
函數(shù)指針:
int ?fun(int x, char y);?
int ?fun1(int a, char b);
int (*p)(int , char );
函數(shù)與指針
函數(shù)與數(shù)組
/* ******************************************************************* */
一維數(shù)組與指針
type ?a[N]];
sizeof(a[0])==>?
sizeof(a)==> N*type?
sizeof(&a)==> 4
a[0]+1==>值加1
&a[0]+1 ==>加一個(gè)元素
a+1 ==> 加一個(gè)元素,+type?
&a+1 ==> 加一個(gè)數(shù)組
type *p = a;
sizeof(p)==> ? 4
sizeof(*p)==> ?type?
sizeof(&p)==> ?4
p+1 ? ? ==>指向元素,加元素長(zhǎng)度
*p+1 ? ?==>取值 ?+1,值加1
&p+1 ? ?==>+4,指向p后面空間
取值:a[i] == p[i] == *(p+i);
type (*p)[N] = &a;
sizeof(p)==> 4 ?數(shù)組的地址
sizeof(&p)==> 4 ?p本身的地址
p+1==> p存放一維數(shù)組地址,+1加一個(gè)一維數(shù)組長(zhǎng)度,加一行, type*N?
&p+1==> &p是p本身的地址,本身4個(gè)字節(jié),指向p后面空間
*p+1 ==> a+1 加一個(gè)元素
取值:a[i] = *(a+i) = *(*(p)+i) = (*p)[i]?
二維數(shù)組與指針
type a[M][N];
?sizeof:
sizeof(a[0][0]) ==>type
sizeof(a[0]) ? ==> N*type?
sizeof(a) ?===>M*N*type?
sizeof(&a[0][0]) ==>4
sizeof(&a[0]) ?==> 4
sizeof(&a) ? ==> 4
?+1:
a[0][0]+1 ==> 值加1 。?
a[0]+1==> 存放元素地址,加一個(gè)元素長(zhǎng)度 ,列地址 type 同&a[0][0]+1?
a+1 ? ==> 存放一維數(shù)組地址,加一維數(shù)組長(zhǎng)度,行地址, type*N ?&a[0]+1?
&a[0][0] + 1 ?元素地址
&a[0] + 1 ? ? 一維數(shù)組地址
&a + 1 ? ? ? ?二維數(shù)組地址
?取值:a[i][j]==
*(a[i]+j)=*(*(a+i)+j)
?指針:
type *p = a[0]; // = &a[0][0]
sizeof()
+1?
取值:a[i][j] = *(p+i*N+j) = p[i*N+j];
數(shù)組指針:
type (*p)[N] = a;//=&a[0];
sizeof(p)==> 4 ? 存放一維數(shù)組地址的指針
sizeof(&p)==> 4 ?p本身的地址
p+1==> p存放一維數(shù)組地址,+1加一個(gè)一維數(shù)組長(zhǎng)度,加一行, type*N?
&p+1==> ?&p是p本身的地址,本身4個(gè)字節(jié),指向p后面空間
*p+1 ==> p存放數(shù)組地址,*p得到數(shù)組名,*p+1,加一個(gè)元素.?
對(duì)行地址取值得到列地址,列地址+1加一個(gè)元素
取值:a[i][j]
== p[i][j] = *(p[i]+j) = *(*(p+i)+j);
a是行地址常量,存放一維數(shù)組的地址,同時(shí)代表整個(gè)數(shù)組M*N*type個(gè)字節(jié)。
p是行地址變量,存放一維數(shù)組的地址,代表本身4個(gè)字節(jié).
數(shù)組指針
type (*p)[N]; ?--> type ?a[N];
type *(*p)[N]; -->type * a[N];
指針數(shù)組
type *a[N];
sizeof(a)==> 4*N
sizeof(a[0])==> 4?
sizeof(&a)==> ?4
sizeof(&a[0])==> ?4?
a[0] + 1 ?==> ? 元素值加1,元素值是type型地址,指向一個(gè)type型數(shù)據(jù),+1加一個(gè)數(shù)據(jù)長(zhǎng)度,即type長(zhǎng)度
a+1 ==> ? 加一個(gè)數(shù)組元素的長(zhǎng)度,+4
&a+1 ==> ?一維數(shù)組地址,+1加一個(gè)一維數(shù)組長(zhǎng)度, 4*N?
取值: a[i] = *(a+i);
*a[i] = *(*(a+i));
type *(*p)[N] = &a;
數(shù)組指針與指針數(shù)組比較
type (*p)[N] ? PK ? ? type ?*a[N];
字符串與指針數(shù)組
多級(jí)指針
type ?a;
type ?*p = &a;
sizeof(p) ==> 4?
&p+1 ==> +4?
p+1 ==> +type?
type **pp = &p;
sizeof(pp)==>4
sizeof(*pp) ==> 4?
sizeof(&pp) ==>4?
pp+1 ==> +4
一級(jí)指針+1加的是目標(biāo)類型長(zhǎng)度,+1增加type長(zhǎng)度
二級(jí)指針+1加的也是目標(biāo)類型長(zhǎng)度,二級(jí)目標(biāo)是一個(gè)指針,+1增加4個(gè)字節(jié)
2.1指針與字符串題 http://note.youdao.com/noteshare?id=d39d0b93fb98eccc3feb7f9e84999ea8
/* ***********************************************************************/
函數(shù):
函數(shù)定義:
函數(shù)聲明:
函數(shù)調(diào)用:
函數(shù)傳參:
值傳遞
址傳遞
函數(shù)返回值:
返回和傳參取數(shù)據(jù)。
嵌套與遞歸函數(shù):
指針函數(shù):
int fun(int x, char y);
int *fun(int x, char y);
char *fun(int x, char y);
函數(shù)指針:
int ?fun(int x, char y);?
int ?fun1(int a, char b);
int (*p)(int , char );
函數(shù)與指針
函數(shù)與數(shù)組
/* ******************************************************************* */
總結(jié)
- 上一篇: 指针、数组、函数阶段小结
- 下一篇: C语言register关键字——最快的关