你好我正在为我的考试学习c ++,我们有一个写在纸上的程序,我们必须编写什么程序返回我有指针和功能的问题
我知道它是如何工作的,直到:cout << *(++c) << endl; c++; cout << *c << endl; c--; cout << *c << endl;
这是代码:
#include <iostream>
using namespace std;
void Ac (int& x, int &y) { y+=2; x=y-1;};
void Dc (int x, int y) { y-=2; x=y+1;};
int main ()
{
int a=2, i=-2, v=3, e=8, f=4, b[]={3,6,9,1,4,7,2,5}, *c=b;
cout << "a\n" << a << endl;
cout << a-- << endl; cout << a << endl; cout << --a << endl;
for (int i=1; i<(a+4); i++)
cout << b[i] << endl;
cout << *(++c) << endl; c++; cout << *c << endl; c--; cout << *c << endl;
while (i<=0)
{
v-=i;
cout << v+2 << endl; i++;
}
Ac (e,f); cout << e << endl << f << endl;
Dc (e,f); cout << e << endl << f << endl;
Ac (f,e); cout << e << endl << f << endl;
return 0;
}
此外,y += ++x
做了什么? (不在此计划中)
答案 0 :(得分:0)
com.example.android.camera2basic.demo
=取消引用指针获取指针指向地址的元素
*c
=打印该元素
cout << *c << endl;
=增加指针++c
(by sizeof(int)
bytes)以指向下一个元素
c
=取消引用增加指针以获取指针指向地址的元素
*(++c)
=打印该元素
cout << *(++c) << endl;
=递减指针--c
(by sizeof(int)
bytes)以指向上一个元素答案 1 :(得分:0)
我想你不想知道程序返回什么,这是零, 返回0;
而是程序将产生的输出。
让我们来看看你不明白的部分:
while (i<=0)
由于i设置为-2,循环将重复3次,一次为-2,然后递增为-1,再次运行,再次为0。
{ v-=i; cout << v+2 << endl; i++; }
编辑:
我的错误,v - =我是v = v - i。
所以第一次v将是3 - ( - 2),即5,输出将是7。
第二次v为5,变为5 - ( - 1),输出为8。
第三次v将为6并且变为6 - ( - 0)输出将为8。
v由v- = i改变,但不是由cout&lt;&lt; V + 2。
因此输出正确7 8 8。
Ac (e,f); cout << e << endl << f << endl;
Ac
适用于您调用它的变量(即&amp;符号)的引用。
这意味着它将改变这些变量的内容。
在致电Ac(e,f) e=8 f=4
之前。
获得f = f + 2
6
和e = f - 1
之后,f
的新值现在为5
;
这就是产生的结果。
Dc (e,f); cout << e << endl << f << endl;
Dc
不适用于引用,它不会更改您调用它的变量的实际值。
因此它会像以前一样显示e和f的值(5
和6
)
Ac (f,e); cout << e << endl << f << endl;
与Ac
的第一次调用相同,只是反过来使用e
和f
的新值5
和6
)
return 0;
就像我在第一行中说的那样,由于你的主要功能,它会返回零。
编辑:我希望我没有错过解释“直到”,我以为你确实理解了代码,除了这一行以外的所有内容。 如果不是这种情况,请评论并删除我的答案。
答案 2 :(得分:0)
首先,您必须知道指针只能指向一个变量或内存空间
这里*c=b
表示c
指向b[0]
的第一个字节(不是数组!)。
假设b [0]的地址是5002.
现在是句子*(c++)
,这里c是一个整数指针,所以它增加2,因为整数有2个字节。所以最后c指向存储器地址5004,它是b[1]
的地址
在c ++语句c之后,指向数组中的下一个元素意味着b [1]
&安培; finally *(c++)
返回存储在c。
答案 3 :(得分:0)
我刚刚在您的输出中添加了一些文字。希望这将有助于您了解该计划正在做什么。请注意,对函数Ac中的变量所做的任何更改都会影响函数外部的变量(因为参数是通过引用传递的)。函数Dc不会发生这种情况(因为参数是按值传递的)。
对于指针,您的* c指的是b
的特定值#include <iostream>
using namespace std;
void Ac (int& x, int &y) { y+=2; x=y-1;};
void Dc (int x, int y) { y-=2; x=y+1;};
int main ()
{
int a=2, i=-2, v=3, e=8, f=4, b[]={3,6,9,1,4,7,2,5}, *c=b;
cout << "a\n" << a << endl;
cout << a-- << endl; cout << a << endl; cout << --a << endl;
for (int i=1; i<(a+4); i++)
cout << b[i] << endl;
cout << "playing with pointer" << endl;
cout << *(++c) << endl; c++; cout << *c << endl; c--; cout << *c << endl;
cout << "finish playing with pointer \Entering the while loop" << endl;
while (i<=0)
{
v-=i;
cout << v+2 << endl;
i++;
}
cout << "finish the while cicle\nSome funtions calls" << endl;
cout << "Values of e and f beforer calling function Ac(e,f)\n"<<e << endl << f << endl;
Ac (e,f); cout << "Values of e and f afeter calling function Ac(e,f)\n"<<e << endl << f << endl;
cout << "Values of e and f beforer calling function Dc(e,f)\n"<<e << endl << f << endl;
Dc (e,f); cout << "Values of e and f afeter calling function Dc(e,f)\n"<<e << endl << f << endl;
cout << "Values of e and f beforer calling function Ac(f,e)\n"<<e << endl << f << endl;
Ac (f,e); cout << "Values of e and f afeter calling function Ac(f,e)\n"<<e << endl << f << endl;
return 0;
}