理解C ++中的指针和函数

时间:2016-06-29 13:18:39

标签: c++

你好我正在为我的考试学习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做了什么? (不在此计划中)

4 个答案:

答案 0 :(得分:0)

  • com.example.android.camera2basic.demo =取消引用指针获取指针指向地址的元素

  • *c =打印该元素

  • cout << *c << endl; =增加指针++cby sizeof(int) bytes)以指向下一个元素

  • c =取消引用增加指针以获取指针指向地址的元素

  • *(++c) =打印该元素

答案 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 6e = f - 1之后,f的新值现在为5;

这就是产生的结果。

Dc (e,f); cout << e << endl << f << endl;

Dc不适用于引用,它不会更改您调用它的变量的实际值。

因此它会像以前一样显示e和f的值(56

 Ac (f,e); cout << e << endl << f << endl;

Ac的第一次调用相同,只是反过来使用ef的新值56

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