为什么在C中的函数类型声明后有星号?

时间:2014-12-28 21:33:24

标签: c pointers types

我的问题在标题中,更多是与语法相关的问题。有谁知道*在下面的函数中做了什么?见这里:

int* reat(int *n)
{
     int i, *array;
     do 
     { 
         printf("n="); scanf("%d", n);
     } while (*n < 1);
     array = (int *)malloc(*n * sizeof(int));
     for (i = 0; i < *n; i++)
     { 
        printf("%d. broj: ", i + 1);
        scanf("%d", array + i); 
     }
     return array;
}

2 个答案:

答案 0 :(得分:2)

语法

int i, *array;

i声明为int类型的变量,arrayint*类型的变量。这种声明并不常见,但它是合法的C代码。

希望这有帮助!

答案 1 :(得分:2)

*中的int* reat(int *n)在返回中指示此函数将指针返回到整数值而不是整数值本身。 *在参数列表中指示此函数还希望指针为整数值而不是&#34; raw&#34;参数的整数值。

例如,

int x = reat(n); // assume n is a pointer to an int

可能在大多数系统上都无法编译。如果是,您将以x存储内存地址,而不是您期望的整数值。而是写

int *x = reat(n)

存储x reat()返回的指针(到某个整数值)。考虑这个功能:

int addone(int x) {
  return 1 + x;
}

此函数为其参数采用整数值。要访问reat()返回所指向的整数值并在addone()中使用它,我们需要像这样调用它:

int *x = reat(n)
addone(*x)

从而使用x运算符解除引用 *以访问它指向的整数值。 addone(x)不会编译,因为x没有解除引用,是内存地址而不是整数。

了解何时*用于定义指针以及何时用于取消引用指针将随着时间的推移成为第二天性。相信它在函数定义中出现的任何时候,无论是作为参数还是返回,它都表示正在使用指针。