+++++++++++++++++++++++++++++++++++++++++++++++++
void callee(int * count) {
count++;
}
int main (int argc, char *argv[]) {
int count = 4;
callee(&count);
printf("%d", count);
return 0;
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++
int callee(int * count) {
count++;
return *count;
}
int main (int argc, char *argv[]) {
int count = 4;
int retval;
retval = callee(&count);
printf("%d", retval);
return 0;
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
void callee(int * count) {
(*count)++;
}
int main (int argc, char *argv[]) {
int count = 4;
callee(&count);
printf("%d", count);
return 0;
}
++++++++++++++++++++++++++++++++++++++++++++++++++++++
上述三段程序的打印结果各是什么呢?
第一个,是4
第二个,不确定
第三个,是5
其实这里涉及的问题主要有两个,一个是指针参数的问题,一个是传参方式的问题。第一段由于传入的是count的地址的拷贝,那么拷贝的值变了但是存储在count里的那个地址并没有改变,所以拿出来之后还是4
第二个就不同了,改变了拷贝的值,但是返回的是拷贝下一个地址的内容,所以返回的内容就不确定啦
第三个相当于传引用。
void callee(int & count) {
count++;
}
int main (int argc, char *argv[]) {
int count = 4;
callee(count);
printf("%d", count);
return 0;
}
所以在涉及指针传参的情况的时候一定要弄清楚再做结论。