如何打印存储在函数中的值,函数返回一个指针



我对编程很陌生,所以请耐心等待!

这是我的代码(C(:

int * arrayExpander(int arr[], int size);
int main()
{
int arr[] = { 1,2,3,4,5 };
int size = 5;
int* arrPtr = arrayExpander(arr, size);
for (int i = 0; i < size * 2; i++) {
printf("New array: %d n", *arrPtr);
}
}
int * arrayExpander(int arr[], int size)
{
int newInt[10];
int* expandedArr = &newInt;
//move elements from original to expanded and initialise remaining elements with 0
for (int i = 0; i < size * 2; i++) {
if (i < size) {
expandedArr[i] = arr[i];
} else {
expandedArr[i] = 0;
}
}
return expandedArr;
}

我的print语句没有正确打印expandedArr中存储的值。我尝试了一些变体,但不确定如何修复。

提前感谢

在您的代码中,expandedArr是一个本地指针变量,在我们从函数返回后,它会被销毁。我们需要使用malloc来分配内存,以延长它们的使用寿命。请参阅以下代码:

#include<stdio.h>
#include<stdlib.h>
int * arrayExpander(int arr[], int size);
int main()
{
int arr[] = { 1,2,3,4,5 };
int size = 5;
int* arrPtr = arrayExpander(arr, size);
for (int i = 0; i < size * 2; i++) {
printf("New array: %d n", *(arrPtr+i)); // *arrPtr prints only first element
}
}
int * arrayExpander(int arr[], int size)
{

int* expandedArr = malloc(10*sizeof(int)); // You need allocate memory in heap
//move elements from original to expanded and initialise remaining elements with 0
for (int i = 0; i < size * 2; i++) {
if (i < size) {
expandedArr[i] = arr[i];
} else {
expandedArr[i] = 0;
}
}
return expandedArr;
}

输出:

New array: 1 
New array: 2 
New array: 3 
New array: 4 
New array: 5 
New array: 0 
New array: 0 
New array: 0 
New array: 0 
New array: 0 

最新更新