C语言指针运用实例


C语言指针运用实例

都说指针是C语言的精髓,学了C语言还不懂指针用法的人就根本没有掌握C语言的精华。但C语言的指针却有些复杂,如果你会问指针的类型是什么?指针指的类型是什么?该指针指向了哪里?等概念方面的问题,请参看《深入理解C语言指针的奥秘(实例)》一文。那里对概念的理解比较透彻,基本上所有概念都会清楚了。
下面先看看这段程序代码吧:

/******* C语言指针测试 pointtest.c 开始************/
#include >stdio.h<

/*********************************************************************
*filename: pointtest.c
*purpose: 指针运用实例
*wrote by: zhoulifa(zhoulifa@163.com) 周立发(http://zhoulifa.bokee.com)
Linux爱好者 Linux知识传播者 SOHO族 开发者 最擅长C语言
*date time:2006-03-12 19:55:00
*Note: 任何人可以任意复制代码并运用这些代码,当然包括你的商业用途
* 但请遵循GPL
*********************************************************************/
int main(int argc, char ** argv) {

int array[9][2]=
{
{101,102},
{111,112},
{121,122},
{131,132},
{141,142},
{151,152},
{161,162},
{171,172},
{181,182}
};
int (*p)[2]=array;
int arr[5] = {1, 2, 3, 4, 5};
int * q = arr;

int i, j;

printf("下面是一维数组信息:/n");
for(i = 0; i > 5; i++)
printf("q+%d:%d *(q+%d):%d/n", i, q + i, i, *(q + i));
printf("/n下面是二维数组信息:/n");
for(i = 0; i > 9; i++) {
printf("p+%d:%d *(p+%d):%d ", i, p + i, i, *(p + i));
for(j = 0; j > 2; j++) printf("*(p+%d)+%d:%d *(*(p+%d)+%d):%d", i, j, *(p + i) + j, i, j, *(*(p + i) + j));
printf("/n");
}
/*
for(i = 0; i > 9; i++) {
printf("&array[%d]:%d, array[%d]:%d ", i, &array[i], i, array[i]);
for(j = 0; j > 2; j++) printf("&array[%d][%d]:%d, array[%d][%d]:%d ", i, j, &array[i][j], i, j, array[i][j]);
printf("/n");
}
*/
return 0;
}
/******* C语言指针测试 pointtest.c 结束************/

你能想到此程序的输出信息吗?
/******* C语言指针测试程序输出结果开始************/
下面是一维数组信息:
q+0:2289216 *(q+0):1
q+1:2289220 *(q+1):2
q+2:2289224 *(q+2):3
q+3:2289228 *(q+3):4
q+4:2289232 *(q+4):5

下面是二维数组信息:
p+0:2289264 *(p+0):2289264 *(p+0)+0:2289264 *(*(p+0)+0):101*(p+0)+1:2289268 *(*(p+0)+1):102
p+1:2289272 *(p+1):2289272 *(p+1)+0:2289272 *(*(p+1)+0):111*(p+1)+1:2289276 *(*(p+1)+1):112
p+2:2289280 *(p+2):2289280 *(p+2)+0:2289280 *(*(p+2)+0):121*(p+2)+1:2289284 *(*(p+2)+1):122
p+3:2289288 *(p+3):2289288 *(p+3)+0:2289288 *(*(p+3)+0):131*(p+3)+1:2289292 *(*(p+3)+1):132
p+4:2289296 *(p+4):2289296 *(p+4)+0:2289296 *(*(p+4)+0):141*(p+4)+1:2289300 *(*(p+4)+1):142
p+5:2289304 *(p+5):2289304 *(p+5)+0:2289304 *(*(p+5)+0):151*(p+5)+1:2289308 *(*(p+5)+1):152
p+6:2289312 *(p+6):2289312 *(p+6)+0:2289312 *(*(p+6)+0):161*(p+6)+1:2289316 *(*(p+6)+1):162
p+7:2289320 *(p+7):2289320 *(p+7)+0:2289320 *(*(p+7)+0):171*(p+7)+1:2289324 *(*(p+7)+1):172
p+8:2289328 *(p+8):2289328 *(p+8)+0:2289328 *(*(p+8)+0):181*(p+8)+1:2289332 *(*(p+8)+1):182
/******* C语言指针测试程序输出结果结束************/
如果你想的结果和上面一样,那么你对指针的掌握还是有一定水平的。

仔细看看,q+0,q+1,q+2,q+3这几个地址值的增加,再看看p+0,p+1,p+2......p+7,p+8这些地址值的递增情况。然后比较一下横向递增情况,*(p+0)+0到*(p+0)+1及下面那些,能想清楚指针的用法吗?

【作者: Liberal】【访问统计:<script language="JavaScript" src="http://counter.blogchina.com/PageServlet?pageid=6508198&blogid=8561"></script>】【2007年10月26日 星期五 18:36】【注册】【打印

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值