最近在《c语言教程(原书第四版)》上(由Al Kelley著,徐波译)的书上看到我从前从未看到的一个有关指针编程样式,于是摘下来记录之。为了验证其正确性,我自己变了个小程序来验证了,代码如下:
- #include <stdio.h>
-
-
void ptr(int input,int *num_ptr)
-
{
-
if(input == 2)
-
{
-
++*num_ptr;
-
printf("Haha\n");
-
}
-
else if(input == 3)
-
{
-
--*num_ptr;
-
printf("Haha!Hello!\n");
-
}
-
}
-
-
int main(void)
-
{
-
int input;
-
int num = 0;
-
scanf("%d",&input);
-
-
ptr(input,&num);
-
printf("num = %d\n",num);
-
return 0;
-
}
乍一看我都不觉得我会变出这样的代码,这肯定是参考了大师们杰作的,啊哈哈!于是我在(windows下的gcc版本)gcc下编译了:过程如下:
- G:\C_C++\ABookOnC\ptrverify>gcc -o ptrverify -Wall ptrverify.c
-
-
G:\C_C++\ABookOnC\ptrverify>ptrverify.exe
-
2
-
Haha
-
num = 1
-
-
G:\C_C++\ABookOnC\ptrverify>ptrverify.exe
-
3
-
Haha!Hello!
-
num = -1
-
-
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的值了,哈哈!
真是一个好的方法啊!
阅读(1870) | 评论(3) | 转发(0) |