最近在《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的值了,哈哈!
真是一个好的方法啊!
09-25 02:49