无法让我的指针发送对数组的引用
Can't get my pointers to send a reference to the array
#include<stdio.h>
#include<stdlib.h>
int* getEvenNumbers(int arr[], int N)
{
int i, k = 0 , a[50], p;
for (i = 0; i < N; i++)
{
if (arr[i] % 2 == 0)
{
arr[k]=arr[i];
k++;
}
}
return arr[k];
}
int main ()
{
int i, arr[5000000], N, a[500000], k, *p;
printf("nEnter your desired length of the array:nn");
scanf("%d", &N);
for (i = 0; i < N; i++)
arr[i]= rand();
getEvenNumbers (arr, N);
printf("nnEven numbers in the array are as follows:nn");
for (i = 0; i < N; i++)
{
a[i]= *(p+i);
printf("n[%d] = %d", (i+1), a[i]);
}
}
请我知道这对你们来说可能很容易,但我需要帮助弄清楚如何在不删除数组的所有值的情况下返回指向数组的指针,我也不能使用全局变量,它必须是一个返回指向数组的指针的函数
首先,减小这些数组的大小,您不需要那么多空间。其次,你做了你的
获取偶数
函数返回一个int *
,而不是一个int
。 arr[k]
不是int *
.我也不明白,如果你调用函数时没有分配任何内容,你为什么要返回一些东西。您可以将返回类型更改为 void
。
void getEvenNumbers(int arr[], int N(
您也永远不会为 p
分配任何内存。你可以做
p = (int*( malloc(sizeof(int((;
由于您从未为p
分配任何内存,因此以下代码行
a[i]= *(p+i(;
将a[i]
分配给随机地址。您应该尝试重写此程序。这个程序中有很多错误,我什至没有纠正。在谷歌上查找finding even numbers in array program
或类似的东西,看看这些例子的代码。
编辑:
我找到了一些代码示例供您使用。我希望它有所帮助!
堆栈溢出
sanfoundry.com
调用方已经知道数组的地址,所以你只需要返回新的长度。 如果我们还删除未使用的变量并利用C++声明,我们将得到:
int getEvenNumbers(int* arr, int N)
{
for (int i = 0, k = 0; i < N; i++) {
if (arr[i] & 1 == 0) { // even if lowest bit is zero
arr[k] = arr[i];
k++;
}
}
return k;
}
现在您可以轻松打印偶数:
int k = getEvenNumbers(arr, N);
printf("nnEven numbers in the array are as follows:nn");
for (i = 0; i < k; i++) {
printf("n[%d] = %d", (i+1), arr[i]);
}
从堆动态分配内存。
int* a= new int [N];
//Now store the elements from index 1.
// at a[0] store the number of even number you have found in this function.
return a;
在main
你知道有多少个偶数。
int *a1=getEvenNumbers(arr,n);
count_even=a1[0];
for(index=1;index<=count_even;index++)
cout<<a1[index];
代码在这里给出-
#include<stdio.h>
#include<stdlib.h>
int* getEvenNumbers(int arr[], int N)
{
int i, k = 1 , p;
int* a=new int[N+1];
for (i = 0; i < N; i++)
{
if (arr[i] % 2 == 0)
a[k++]=arr[i];
}
a[0]=k-1;
return a;
}
int main ()
{
int i, N;
printf("nEnter your desired length of the array:nn");
scanf("%d", &N);
int arr[N];
for (i = 0; i < N; i++)
arr[i]= rand();
int *a=getEvenNumbers (arr, N);
printf("nnEven numbers in the array are as follows:nn");
for (i = 1; i <= a[0]; i++)
printf("n[%d] = %d", (i), a[i]);
delete []a;
}
更好的选择是使用 std::vector
.你可以在这里阅读。
相关文章:
- 通过指针与数组引用扩展数组索引序列
- 将链表的内容放在数组引用中
- 是否允许使用初始值设定项列表将const数组引用实例化为构造函数参数
- C 在将数组引用分配给struct时麻烦
- Typedef数组引用
- 通过强制转换创建子数组引用
- 将数组引用 'T(&)[n]' 引用到 'std::array<T, n>' 的内容
- constexpr 数组引用参数
- 寻找有关函数定义和原型中数组引用的说明
- Initializer_list作为非模板上下文中数组引用参数的参数
- 如何使用一个动态创建的一维数组的二维数组引用仅与标准库?
- 如何返回具有大小的POD数组引用
- 在C++中返回数组引用的语法
- 是否可以声明转换函数返回数组引用而不使用typedef
- 自定义到数组引用的转换
- 类数组引用的NullReferenceException
- 数组指针与数组引用之间的差异
- 在c++中传递数组引用
- 使用特征矩阵作为特征数组引用的参数
- 如何从函数传递数组引用