您的位置:首页 > 其它

指针和数组实例解析(一)

2013-12-12 20:25 267 查看
#include <stdio.h>

/*****

关于指针与数组的理解

***/

int main()

{

#if 0

int i = 10;

int *p = &i;

int a[10];

int *pa[10];//指针数组,本质是一个数组,每个元素都是一个指针

int (*ap)[10];//数组指针,其本质是一个指针,指向一个数组,这个数组有10个元素

int **bp = &p;//二级指针,经常与指针数组配合使用。

int ba[10][10];

printf("&I = %p\n",&i);

printf("&p = %p\n",&p);//若要打印变量的地址,许使用%p选项,指针变量本质也是一个变量

printf("**bp = %d\n",**bp);

#endif

#if 0

/*****************

* pointer`s array & 2 array

二维数组的理解:

a[3][2] ==>{a[0],a[1],a[2]}

将二维数组等效为一维数组

a为整个数组的标号,数组的首地址(变量名是对内存空间的抽象)。

a[0] a[1] a[2]表示每行的首地址

a[i] = *(a + i)

a[i][j] = *(*(a + i) +j)

* ****************/

int i,j;

char *a[5] = {"hello","world","love","china"};//定义了一个指针数组,

//每一个元素都是一个字符串,都需一个字符型指针变量表示,所以定义了一个指针数组

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

{

for(j = 0; j < 5; j ++)

putchar(a[i][j] /* *(*(a + i) + j) 指针形式访问,(a[i][j])为下标形式访问 */ );

putchar(10);

}

#endif

#if 0

/***********************

* array`s pointer && pointer `s pointer

* **********************/

char a[10] = {1,2,3,4,5,6,7,8,9,10};

char (*ap)[5] = a;

char **bp = a;//会出现断错误,a为一维数组。

printf("** ap = %d\n",**ap);

printf("**(ap + 1) = %d\n",**(ap + 1));

printf("**(bp + 1) = %d\n",**(bp + 1));

#endif

#if 0

/***********************

2 array & 2 point

***************************/

char ch;

char *p = &ch;

char ba[3][3] = {1,2,3,4,5,6,7,8,9};

char **bp = ba;//二维数组不能用二级指针运算。bp+1 = ?不确定。

printf("ba = %p\n",ba);

printf("bp = %p\n",bp);

printf("%d\n",**(ba + 1));//数组元素以指针形式访问

printf("%p\n",**(bp + 1));

#endif

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: