如何用指针填充在主函数中创建的数组到void函数中?

问题描述 投票:0回答:1
#include <iostream>
using namespace std;

void add_numbers_to_array (int *array);

int main() {
    int array1[] {};
    int array2[] {};

    cout << array1 << endl;
    cout << "PLEASE ADD INTEGER NUMBERS TO THE ARRAY1" << endl;
    add_numbers_to_array(array1);

    cout << array2 << endl;
    cout << "PLEASE ADD INTEGER NUMBERS TO THE ARRAY2" << endl;
    add_numbers_to_array(array2);
    
    unsigned array1_size = sizeof(array1) / sizeof(array1[0]);
    unsigned array2_size = sizeof(array2) / sizeof(array2[0]);

    cout << array1[0] << array1_size << endl;
    cout << array2[0] << array2_size << endl;

    cout << endl;
    return 0;
}

void add_numbers_to_array (int *array) {
    unsigned numberfor_arraysize {0};
    cout << "HOW MANY NUMBERS DO YOU WANT TO ADD: ";
    cin >> numberfor_arraysize;

    for (unsigned i=0 ; i<numberfor_arraysize ; i++) {
        int number {0};
        cout << "\nPLEASE ADD THE NUMBER " << i+1 << ": ";
        cin >> number;

        *(array+i) = number;
        cout << number << " HAS BEEN ADDED TO ARRAY. LOCATION: " << array+i << " => " << *(array+i) << endl;
    }
}

嗨,我是编程新手,目前正在学习指针。当我尝试做挑战部分时,我陷入困境,我不明白我做错了什么?我在这里缺少什么?

在主函数中,我声明了两个名为

array1
array2
的数组。我想用用户输入指定整数。所以我创建了一个名为
add_numbers_to_array
的函数,并在函数参数中将 array 声明为指向整数的指针。我使用指针是因为我想更改主函数中的实际数组而不是创建副本。

然后,在主函数中,我使用数组地址调用

add_numbers_to_array
函数。在 void 函数中,我询问“您希望添加多少个数字”,然后循环获取该数量的数字。每次迭代,用户输入一个数字,该数字将通过赋值运算符指定给指针数组。

所以一切都按照我想要的方式进行。因为我能看到它。但是当 void 函数终止并且我们返回主函数时,我看不到用户输入的数组中的数字。我在这里做错了什么?我错过/看不到/不明白什么?

c++ arrays function pointers c++17
1个回答
0
投票

我真的很感谢你在编码中尝试这些奇怪的事情。那么只有你才能获得你的知识。

一般数组可以通过两种方式初始化,静态和动态。静态定义意味着分配的内存将在执行 Main 函数或您创建的任何函数后被销毁。也就是说,从该特定 function() 返回后,它默认会被销毁。而动态意味着使用 C++ 中的 new() 或 C 中的 malloc() 从堆存储中分配内存。这样分配的内存在执行任何 function() 后都会保留。

示例: 静态:int arr[5]--> 在堆栈中分配内存用于存储 5 个(4 字节)值整数。 动态:int* arr=new int[5]-->发生在堆存储中

在这里,您静态创建了一个函数,但没有指定大小。所以编译器知道,您正在创建用于存储 0 整数的内存。即您没有存储任何值。所以内存没有被分配。

*(数组+i) = 数字;<--By this line you are assigning values to the array of Zero sized(Memory not allocated) which leads to the undefined behavior and meaningless statement. That's why, the value is not get reflected in the Main(). To overcome this, You can initialize the array with the required size and pass it to the arguments of that function.

例如:

void main() {
 int array1[n] {};//n-->Size of Array which can be get from the users
 int array2[m] {};
    add_numbers_to_array(array1,n);
    add_numbers_to_array(array2,m);
    return 0;
}
void add_numbers_to_array (int *array, int size) {
    for (unsigned i=0 ; i<size ; i++) {
        int number;
        //Get the number from users.
        *(array+i) = number;
         }
    return;
}
© www.soinside.com 2019 - 2024. All rights reserved.