为什么在许多地方* p()被称为返回指针的函数而不是返回地址的函数?

时间:2019-03-17 13:15:09

标签: c

我在很多地方都看到代码*p()引用了一个返回指针的函数 。但是,当编码看起来很清楚时,该函数没有返回指针,而是返回了地址。函数中的int *部分说明了处理函数所需要的内容。

// Function returning an address
int *funcX(void){
    static int x = 5;
    return &x;
}

int *x = funcX(); // Pointer to int type
int *y(void) = &funcx; // Pointer to function that return an address to an int

对于为什么称为返回指针的函数有一个简洁的解释?

2 个答案:

答案 0 :(得分:3)

在C中,地址是指针类型的值。

例如,一元地址运算符&产生其操作数的地址,并产生类型为 pointer指向some_type 的表达式,其中some_type是操作数的类型。

说它“返回一个指针”可能有点不精确。我发现使用 pointer 这个词作为形容词而不是名词来使用更为清晰。因此,我们可以拥有一个指针值,一个指针对象,一个指针类型,一个指针表达式等。一个指针值(某种指针类型的值)通常是一个地址(某些函数或对象的地址)-除非它是一个空指针值,一个无效的指针值或刚好超出某个对象末尾的指针。

答案 1 :(得分:0)

  

为什么在很多地方* p()被称为返回指针的函数而不是返回地址的函数?

这取决于所强调的内容。


int nabs(42)返回-42。 int nabs()返回intint nabs()返回一个整数int nabs()返回一个对象

这些不同的方式将收益描述为类型数据类数据区域

int nabs(int x) {
  if (x < 0) return x;
  return -x;
}

int *funcX(void){类似,返回&x value int * type 或指向int的指针,数据类 1 作为地址对象

在C语言中, pointer 类型具有精确的含义。 地址没有。

  

指针类型可以从称为 referenced 类型的函数类型或对象类型派生。指针类型描述了一个对象,该对象的值提供对所引用类型的实体的引用。从引用类型T派生的指针类型有时称为“ T指针”。从引用类型构造指针类型的过程称为“指针类型派生”。指针类型是完整的对象类型。 C11§6.2.520


1 请勿与具有特定含义的C ++ class混淆。