int *name(int t)
和 int name(int *t)
的区别在于它们的函数参数和函数返回值类型不同。
int *name(int t)
表示 name 函数的参数 t 是一个整数,该函数的返回值是一个整型指针,即函数返回一个指向整型变量的指针。int name(int *t)
表示 name 函数的参数 t 是一个指向整型变量的指针,该函数的返回值是一个整数,即函数返回一个整型变量。
可以通过以下示例代码更好地理解二者之间的区别:
#include <stdio.h>
// int *name(int t) 的实现
int *addOne(int x) {
int y = x + 1;
return &y;
}
// int name(int *t) 的实现
int addOneToPtr(int *p) {
int x = *p;
return x + 1;
}
int main() {
int a = 5;
int *p;
p = addOne(a);
printf("%d\n", *p); // 输出一个不确定的值(未定义行为),因为 p 指向的变量已经不存在了
int b = 6;
int c = addOneToPtr(&b);
printf("%d\n", c); // 输出 7
return 0;
}
上面代码中,addOne
函数将变量 x
加一,并返回 y
的地址(即指向 y
的指针),但由于 y
是在函数栈内部局部变量,函数返回后该变量失效,因此 p
指向的内存空间已经被释放,该指针不再指向有效的内存地址,打印 *p
的值为未定义行为。
另一方面,addOneToPtr
函数将传入的指针所指向的整型变量加一,并返回加一后的整型变量值。在主函数中,定义了变量 b
并将其地址作为参数传入 addOneToPtr
函数,函数返回变量 b
加一后的值并保存在变量 c
中,然后输出 c
的值为 7。
因此,在不同的应用场合下选择正确的参数类型和返回值类型很重要。