首页 > 试题广场 >

程序运行后的输出结果是()

[单选题]
#include<iostream>
using namespace std;
void f(int *p,int *q)
{
	p++;
	*q=*q+1;
}
int main() {
	int m=1,n=2,*r=&m;
	f(r,&n);
	cout<<m<<","<<n;
	return 0;
}
程序运行后的输出结果是()
  • 2,3
  • 1,4
  • 1,3
  • 1,2
/*
f(r,&n); 指针r指向m的地址。
调用该函数时,将m和n的地址复制一份赋值给指针p和q;
在函数体中,将指针p加1,即p指向m的下一个地址,函数调用结束后该指针即被释放,m的地址不变;
在函数体中,将指针q所指内容加1,即n+1,这样就间接通过q改变了n的值。
*/

发表于 2016-04-16 09:20:43 回复(0)
在f()函数里p++是指针地址上的改变对数值没有影响,也就是r改变了
发表于 2015-11-30 17:48:07 回复(1)
p++只是地址加加,m中值没有变化
发表于 2017-10-01 14:55:23 回复(0)
主要看参数传递吧,值传递是不会改变原始数据的,引用传递和地址传递都会改变原来的参数
发表于 2018-06-07 10:02:50 回复(0)
典型的要注意:应用和指针的区别,以及指针的作用域
发表于 2017-09-01 19:39:48 回复(0)
#include<iostream>

using namespace std;

void f(int *p, int *q)
{
	cout << "函数中自增前p的地址:" << p << endl;
	p++;
	cout << "*p" << *p << endl;
	cout << "函数中自增后p的地址:" << p << endl;
	*q = *q + 1;
}

int main()
{
	int m = 1, n = 2, *r = &m;
	cout << "调用前r的地址:" << r << endl;
	f(r, &n);
	cout << "调用后r的地址:" << r << endl;
	cout << m << "\t" << n << endl;

	cout << endl;
	r++;
	cout << *r << endl;

	system("pause");
	return 0;
}

运行结果: 调用前r的地址:003EFAC8
函数中自增前p的地址:003EFAC8
*p-858993460
函数中自增后p的地址:003EFACC
调用后r的地址:003EFAC8
1       3

-858993460
请按任意键继续. . . 
上边各位解释的很到位,在这里附上代码。

发表于 2016-07-01 15:29:49 回复(0)
n的引用传入函数f, 而m没有在函数中改变, 答案为C
发表于 2015-11-17 16:08:20 回复(2)
p++只是地址加加,m中值没有变化,p是指针
发表于 2022-07-31 19:51:25 回复(0)
拓展:在函数f()中,在“p++;”后加一句:“*p++;”,答案是什么?请解释原因。
发表于 2016-11-14 10:49:03 回复(1)