指针和数组实例解析(一)
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;
}
/*****
关于指针与数组的理解
***/
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;
}
相关文章推荐
- Linux系统调用 int 80h int 0x80
- BI 开发EBS报表
- 视频的一些概念
- 第一个leapmotion的小游戏
- 匿名内部类为什么要使用final类型变量
- 05 添加信息
- linux 卸载软件
- IOS开发之UIScrollView与UIPageControl的用法
- MySQL 数据库远程访问授权
- 【Cocos2d-x游戏引擎开发笔记】CCHttpRequest联网
- MySQL基准测试工具
- 模块编译常见错误汇总
- 让我们一起来看看计算的本质吧!
- 面积
- 壳编写
- JavaFx2学习笔记day01
- robotium 测试android渠道包,采用批处理+robotium脚本的方式
- 04 用户名和密码验证是否正确
- 条件语句 if
- xml schema----java Web