首页 > 解决方案 > 如何通过使用非指针参数对指针进行操作的函数传递指针?

问题描述

我刚刚开始在 Code::Blocks 上学习 C++,并且正在通过 new 和 delete 运算符进行动态内存分配练习。main 函数允许用户为多个元素请求内存,然后为这些元素/内存位置分配值。我想创建一个单独的函数 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;
}
}

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

标签: c++pointerscodeblocks

解决方案


您正在 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;
}

顺便说一句,当你计算它时, sum 实际上是指实际的函数 sum() ,因为 int 已经超出了范围。我认为这就是您收到此警告的原因。


推荐阅读