int assign(int *m){
//static int n = 9;
// m = &n; // will assign the value to the variable a = 9
*m = 10;
// int n =8;
// m = &n; // will fail as the scope of the variable is within the function
return 0;
}
int main(){
int a ;
assign(&a);
printf("%d",a);
return 0;
}
和:a = 10是否有其他方法可以获得输出(不传递地址并使用指针和参数到函数中)
答案 0 :(得分:2)
C中的每个函数都允许您返回单个值。
int assign(......)
^
|
output type
您可以使用return
关键字执行此操作。返回某个东西的函数就像任何其他具有相同类型的表达式一样。
例如,如果你有:
int assign(void)
{
return 10;
}
以下所有内容均有效:
int a = assign();
int b = (assign()*20)-assign()/assign();
您可能需要在参数中使用指针的原因是具有多个输出。
例如,取一个遍历数组的函数并返回最小值和最大值:
void minmax(int *array, int size, int *minimum, int *maximum)
{
int i;
int min_overall = INT_MAX;
int max_overall = INT_MIN;
/* error checking of course, to make sure parameters are not NULL */
/* Fairly standard for: */
for (i = 0; i < size; ++i)
{
if (array[i] < min_overall)
min_overall = array[i];
if (array[i] > max_overall)
max_overall = array[i];
}
/* Notice that you change where the pointers point to */
/* not the pointers themselves: */
*minimum = min_overall;
*maximum = max_overall;
}
并在您的main
中,您可以像这样使用它:
int arr[100];
int mini, maxi;
/* initialize array */
minmax(arr, 100, &mini, &maxi);
修改:由于您询问是否有其他方法可以执行此操作,以下是一个示例(尽管我绝对不建议将其用于与您类似的用途):
struct assign_ret
{
int return_value;
int assigned_value;
};
struct assign_ret assign(void)
{
assign_ret ret;
ret.assigned_value = 10;
ret.return_value = 0;
return ret;
}
和main
:
struct assign_ret result = assign();
if (result.return_value != 0)
handle_error();
a = result.assigned_value;
我不建议这样做的原因是struct
用于放置相关的数据。函数错误返回值及其数据输出无关。