繁体   English   中英

使用指针保存从函数在c中返回的数据

[英]Using pointer to save the data that's being returned from the function in c

  1. 当我们想返回一种特定类型的数据时,我们需要首先声明一个全局变量吗? 并将这个变量分配给函数返回的值?

  2. 同样对于int原始数据类型,我们不能使用malloc保留内存块吗?

真诚的,充满疑惑。

#include <math.h> 
#include <stdio.h> 

int *sum(); 
int main() 
{ 
    int *num; 
    num = sum(); 
    printf("\nSum of two given values = %d", *num); 
    return 0; 
} 

int *sum() 
{ 
    int a = 50, b = 80;
    int *sum = NULL; 
    printf("%d %d",a,b);
    *sum = a+b; 
    return sum; 
} 

我想使用指针保存该函数返回的数据。 可能吗? 我知道链接列表结构是可能的。 但是我不确定整数和其他原始数据类型。

从第二个问题开始,可以使用malloc为任何类型的变量分配任何大小的内存。 是的,您可以使用malloc在堆上分配整数和其他原始类型。

int i_am_a_stack_variable = 1;
int * i_am_a_pointer_to_heap_memory = malloc(sizeof(int));

对于第一个问题,我认为您误会了返回变量的工作方式。 通常,应避免使用全局变量。 从函数返回值当然不需要它们。 一个函数的返回值从该函数的堆栈框架复制回分配给它的调用堆栈框架。 请注意,它已复制回去。 无论是原始类型还是指针(实际上只是原始的另一种类型)。 您可以完全不使用指针来编写您的代码。 另外,请注意,即使您提到了全局变量,您的代码也根本没有使用全局变量。

#include <math.h> 
#include <stdio.h> 

int sum(); 
int main() 
{ 
    int num; 
    num = sum(); 
    printf("\nSum of two given values = %d", num); 
    return 0; 
} 

int sum() 
{ 
    int a = 50, b = 80;
    int sum = 0; 
    printf("%d %d",a,b);
    sum = a+b; 
    return sum; 
} 

这有意义吗?

这应该工作

#include <math.h> 
#include <stdio.h> 

int *sum(); 
int main() 
{ 
    int *num; 
    num = sum(); 
    printf("\nSum of two given values = %d", *num); 
    free(num);
    return 0; 
} 

int *sum() 
{ 
    int a = 50, b = 80;
    int *sum = malloc(sizeof(int)); 
    printf("%d %d",a,b);
    *sum = a+b; 
    return sum; 
}

您需要为指针分配内存。 在您的情况下,您需要一个整数的内存。 当您说int * sum = NULL时,您的指针没有地址。 您不能访问空指针。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM