这道题目考得是指针 我就没什么好说的了 另外 第一个printf中一个%d对应了a和b两个值 但不复制变量.则改变时直接改变0x00000001中的数字.<3>void f(int &n){n=10;}int n=5;f(n);同上.只是增加了可读性.传入的是变量且不复制地址.直接调用原地址里的数.和<2>一样 ||| 首先你的程序是有问题的 包子 的答案让我最认可 而且都是正确的 另一种是传引用 ||| 大家都给出了答案 一种是传指针 有两种方式 就不存在这个问题了 ||| 要改变实参的值 要改变实参只需要在主函数中把传下去的两个量改了就行 指针是指向内存地址 而不是地址中的值 但如果指针的值改变了 那么对应的内存地址的值也要改变 但指针指的内存地址不变啊 (不懂再问我啊 ) 比如0x00000001.这样会复制地址 所以可以使用f(5).后面两个就不可以.<2>void f(int *n){*n=10;}int n=5;f(&n);函数中的n是调用的n的地址 则函数中n的地址可能为0x00000002.所以修改时是修改0x00000002中的数字.另外由于是复制的 int*y);这种是能够改变的 因为改变的是指针指向内存的值 ||| <1>void f(int n){n=10;}int n=5;f(n);函数中的n为调用的n(这里为5)的复制体.也就是有两个n.比如调用的n的地址为0x00000001 int y);这种参数是不能够改变实参的 因为交换的只是函数内部的变量的值void swap (int*x void SWAP(int x 因为简洁明了 ||| 为什么要该实参的值 第2个函数的形参是指针因此是直接对指向的地址操作 实参就是调用有参函数时传下去的量 不知道你原本想写的是什么