c语言指针运用实例,C语言指针运用实例

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

下面先看看这段程序代码吧:

/******* C语言指针测试 pointtest.c 开始************/

#include

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

*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及下面那些,能想清楚指针的用法吗?

本文参照了《如何理解c和c++的复杂类型声明》(地址:http://www.programfan.com/blog/article.asp?id=6719)和《深入理解C语言指针的奥秘(实例)》(地址:http://www.pconline.com.cn/pcjob/process/other/others/0512/732804.html)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值