【发布时间】:2011-05-08 17:19:00
【问题描述】:
我正在尝试了解如何在 C 语言中通过引用传递参数。 所以我写了这段代码来测试参数传递的行为:
#include <stdio.h>
#include <stdlib.h>
void alocar(int* n){
n = (int*) malloc( sizeof(int));
if( n == NULL )
exit(-1);
*n = 12;
printf("%d.\n", *n);
}
int main()
{
int* n;
alocar( n );
printf("%d.\n", *n);
return 0;
}
这里是打印出来的:
12. 0。示例 2:
#include <stdio.h>
#include <stdlib.h>
void alocar(int* n){
*n = 12;
printf("%d.\n", *n);
}
int main()
{
int* n;
n = (int*) malloc(sizeof(int));
if( n == NULL )
exit(-1);
alocar( n );
printf("%d.\n", *n);
return 0;
}
打印出来了:
12. 12.这两个程序有什么区别?
【问题讨论】:
-
指针不是整数。您的格式说明符应该是
%p,而不是%d。在您的第一个示例中(现在您已了解原因),n从未初始化,因此使用它会给您带来未定义的行为。任何事情都有可能发生。 -
关于未初始化的指针是正确的,但格式说明符本身在这些示例中是正确的。
标签: c parameter-passing dynamic-memory-allocation