ssd上一道题目引发的思考

+++++++++++++++++++++++++++++++++++++++++++++++++

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;
}



所以在涉及指针传参的情况的时候一定要弄清楚再做结论。















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值