C语言 指针函数返回数组地址,内存地址通过循环或if清除



我试图设置一个指针函数,返回存储在本地的数组的第一个元素的地址,然后在另一个函数上使用(在这种情况下打印)内容。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <stdbool.h>
double *n(int a)
{
int i;
double array[' '];
for(i=0;i<a;i++) 
{
array[i] = rand();
printf("n element: %f tnn", array[i]);

}
return array;
}
void exe()
{
double *unfixed;
int c, b, j;

scanf("%d", &b);
unfixed = n(b);
printf("nn Precoded acces value %f nn", *(unfixed + c));
for(j=0;j<b;j++)
{
printf("n %f", *(unfixed + j));
} 
return;
}
int main()
{
exe();
return 0;
}

当我通过静态语句引用它时,它可以正常工作,例如:

printf("nn %f nn", *(unfixed + c));

相反,当我继续尝试做一个循环或决定时,它只是直接不起作用。

p。d。:由于某些不正当的原因,它可以完美地与int类型的指针函数配合使用。

心理虐待的进一步证据

函数n返回一个指针,该指针指向本地数组的第一个元素,该指针具有自动存储时间,在退出该函数后将不再存在。因此返回的指针无效。对这样的指针解引用会调用未定义的行为。

可以将数组声明为具有静态存储持续时间

static double array[' '];

或动态分配数组

但是在任何情况下,这个函数都是不安全的,因为没有检查a是否大于作为数组大小的整数字符量' '的值。

在函数exe中,您还使用了在此语句中未初始化的变量c

printf("nn Precoded acces value %f nn", *(unfixed + c));

再次调用未定义行为。

相关内容