Chinaunix首页 | 论坛 | 博客
  • 博客访问: 84965
  • 博文数量: 16
  • 博客积分: 146
  • 博客等级: 入伍新兵
  • 技术积分: 139
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-29 22:41
文章分类

全部博文(16)

文章存档

2012年(2)

2011年(14)

分类: C/C++

2011-12-10 13:48:09

最近在《c语言教程(原书第四版)》上(由Al Kelley著,徐波译)的书上看到我从前从未看到的一个有关指针编程样式,于是摘下来记录之。为了验证其正确性,我自己变了个小程序来验证了,代码如下:
  1. #include <stdio.h>

  2. void ptr(int input,int *num_ptr)
  3. {
  4.     if(input == 2)
  5.     {
  6.         ++*num_ptr;
  7.         printf("Haha\n");
  8.     }
  9.     else if(input == 3)
  10.     {
  11.         --*num_ptr;
  12.         printf("Haha!Hello!\n");
  13.     }    
  14. }

  15. int main(void)
  16. {
  17.     int input;
  18.     int num = 0;
  19.     scanf("%d",&input);
  20.     
  21.     ptr(input,&num);
  22.     printf("num = %d\n",num);
  23.     return 0;
  24. }
乍一看我都不觉得我会变出这样的代码,这肯定是参考了大师们杰作的,啊哈哈!于是我在(windows下的gcc版本)gcc下编译了:过程如下:
  1. G:\C_C++\ABookOnC\ptrverify>gcc -o ptrverify -Wall ptrverify.c

  2. G:\C_C++\ABookOnC\ptrverify>ptrverify.exe
  3. 2
  4. Haha
  5. num = 1

  6. G:\C_C++\ABookOnC\ptrverify>ptrverify.exe
  7. 3
  8. Haha!Hello!
  9. num = -1

  10. G:\C_C++\ABookOnC\ptrverify>
呵呵,还真有结果啊!!~~~好来我分析了一下,在main函数里的ptr(input,&num);这一条语句里的&num传的是变量num的地址,而在子函数void ptr(int input,int *num_ptr)里,num_ptr又是一个指针变量,指向的是一个int型的变量;
在这里,通过
ptr(input,&num);把num的的地址赋给num_ptr,而在++*num_ptr(等价于++(*num_ptr));这条语句执行完之后,就只把num的值加一,也就修改了变量num的值了,哈哈!
真是一个好的方法啊!
阅读(1817) | 评论(3) | 转发(0) |
给主人留下些什么吧!~~

wdliming2011-12-14 21:16:24

至少我是学到东西了!!~哈哈

wdliming2011-12-14 21:16:22

至少我是学到东西了!!~哈哈

zhang_x_j2011-12-12 13:43:11

这个真的没什么哇,作者是学生吗