无法使用指针添加数组元素

Posted

技术标签:

【中文标题】无法使用指针添加数组元素【英文标题】:Cannot add elements of arrays using pointers 【发布时间】:2021-03-26 19:13:31 【问题描述】:

我正在尝试添加两个数组的元素并将它们存储在第三个数组中。我正在试验指针,所以我想将它们用作用户定义函数的参数。 当我运行代码时,只要输入数组的前两个值,就会得到错误:exited,segmentation fault。 我痛苦地不知道自己做错了什么。

#include<iostream>
using namespace std;

float addarrays(float ptra1[5], float ptra2[5], float ptra3[5])

    for(int i=0; i<5; i++)
    
        ptra3[i] = ptra1[i] + ptra2[i];
    
  return *ptra3;


int main()

    float A[5], B[5], C[5];
    float *ptA[5], *ptB[5], *ptC[5];
    
    cout<<"Enter Array A: \n";
    for(int i=0; i<5; i++)
    
        cout<<"Element A["<< i <<"] = ";
        cin>>*ptA[i];
    
    
    cout<<"\nEnter Array B: \n";
    for(int i=0; i<5; i++)
    
        cout<<"Element B["<< i <<"] = ";
        cin>>*ptB[i];
    
    
    addarrays(*ptA, *ptB, *ptC);
    cout<<"Displaying result for C[i] = A[i] + B[i]: \n";
    for(int i=0; i<5; i++)
    
        cout<<"\nElement C["<< i <<"] = "<<*ptC[i];
    
    return 0;

【问题讨论】:

不要使用数组。请改用std::vector 您正在尝试存储值而不为其分配内存。就在您的 cin&gt;&gt;*ptX[i]; 之前写 ptX[i]=&amp;X[i]; ex ptA[i]=&amp;A[i]; 。还可以使用另一个循环来设置ptC[i]=&amp;C[i]。但这一切都是多余的,你可以直接使用指向数组的指针。 “只要我输入数组的前两个值”——这为您提供了一种减少 minimal reproducible example 的方法。由于您永远不会到达cout&lt;&lt;"\nEnter Array B: \n" 行,因此请删除它以及直到main 函数末尾的所有后续行。然后删除现在未使用的声明和定义。您将有一个更集中的问题,更少的红鲱鱼。 【参考方案1】:

对于初学者来说,这些指针数组

float *ptA[5], *ptB[5], *ptC[5];

未初始化。

所以这个说法

cin>>*ptA[i];

调用未定义的行为。

您可以设置数组 ptA 的元素,例如在循环中

size_t i = 0;
for ( auto &p : ptA ) p = A + i++;

注意函数addarrays没有设置数组ptC的元素。事实上,如果数组ptC 已正确初始化,它会尝试对数组C 的元素进行序列化。数组ptC 仍未初始化。所以这个说法

cout<<"\nElement C["<< i <<"] = "<<*ptC[i];

将再次调用未定义的行为。

因此您需要初始化指针数组。

size_t i = 0;
for ( auto &p :ptA ) p = A + i++;

i = 0;
for ( auto &p :ptB ) p = B + i++;

i = 0;
for ( auto &p :ptC ) p = C + i++;

函数可以通过以下方式声明和定义

void addarrays(float * ptra1[], float * ptra2[], float * ptra3[], size_t n )

    for ( size_t i = 0; i < n; i++ )
    
        *ptra3[i] = *ptra1[i] + *ptra2[i];
    

并像这样称呼

addarrays( ptA, ptB, ptC, 5 );

【讨论】:

以上是关于无法使用指针添加数组元素的主要内容,如果未能解决你的问题,请参考以下文章

无法在C中使用strcpy从指针数组复制字符串? [复制]

ReactJS:TypeError:无法添加/删除密封数组元素

无法将元素添加到数组

无法使用双指针作为函数参数传递二维数组[重复]

无法将元素添加到 kotlin 中可变列表的数组数组

获取指向 LLVM-IR 中数组第一个元素的指针