如何通过对带有非指针参数的指针进行操作的函数传递指针?

时间:2019-06-09 22:34:29

标签: c++ pointers codeblocks

我刚刚开始在Code :: Blocks上学习C ++,并且正在通过new和delete运算符进行动态内存分配的练习。主要功能允许用户请求存储多个元素,然后将值分配给这些元素/存储位置。我想创建一个单独的函数void sum(int pntsize,int * pnt),该函数在调用时允许用户查找所分配值的总和。由于这些值是通过指针分配的,因此在创建该函数时遇到了麻烦。当我去编译程序时,没有错误。但是,无论输入的值或创建的元素数量如何,总和始终返回1。尽管没有错误,但Code :: Blocks会给出警告,指出:“'void sum(int,int *)'的地址”总是评估为'true'[-Waddress]”,我希望这与我遇到的问题有关。下面是r

#include <iostream>
using namespace std;

void sum(int pntsize, int* pnt)
{
    for(int i=0; i<pntsize; i++)
    {
        int sum = 0;
        sum = *(pnt+i) + sum;
    }
    cout << "The sum of these values is: " << sum;
}

int main()
{

for (char userinput2 = 'y'; userinput2 == 'y';)
            {cout << "For how many elements do you wish to reserve memory?" << endl; 
            int pntsize = 1;
            cin >> pntsize;
            cout << endl;
            int* pnt = new int [pntsize];
            for (int i=0; i<pntsize; i++) //Assigns values
            {
                cout << "Enter a value for Memory Slot " << i << ": ";
                cin >> *(pnt + i);
            }

            cout << endl;

            for (int i2=0; i2<pntsize; i2++) //Displays values
            {
                cout << "Value at Memory Location " << &(pnt[i2]) << ": " << *(pnt + i2) << endl;
            }
cout << endl;
cout << "Do you wish to find the sum of these values?" << endl; //Adds values
            char userinput3;
            cin >> userinput3;

            if (userinput3 == 'y')
                sum(pntsize, pnt);
return 0;
}
}

警告可能与我的问题无关,但也许有人可以解释为什么这个问题不断出现。

2 个答案:

答案 0 :(得分:2)

您要在for循环中重新声明sum。因此,在每次迭代时,它将重新初始化为零。试试:

void sum(int pntsize, int* pnt)
{
    int res = 0;
    for(int i=0; i<pntsize; i++)
    {
        res = *(pnt+i) + res;
    }
    cout << "The sum of these values is: " << res;
}

顺便说一句,由于int已超出范围,所以sum实际是指实际函数sum()。我认为这就是您收到此警告的原因。

答案 1 :(得分:1)

cout<<"The sum of these values is: " << sum; <-sum解析为函数名称。您可能打算在for循环中使用局部变量。但是在声明的范围({})之外不可见。同样,您的方法不会累加任何东西,因为每次迭代都会创建,初始化和销毁​​变量。 修复:

void sum(int pntsize, int* pnt)
{
    int sum = 0;
    for(int i=0; i<pntsize; i++)
    {  
        sum = *(pnt+i) + sum;
    }
    cout << "The sum of these values is: " << sum;
}

也请不要使用new,而要使用std::unique_ptr。为什么?因为您已经忘记删除它了。