我在很多地方都看到代码*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
对于为什么称为返回指针的函数有一个简洁的解释?
答案 0 :(得分:3)
在C中,地址是指针类型的值。
例如,一元地址运算符&
产生其操作数的地址,并产生类型为 pointer指向some_type 的表达式,其中some_type是操作数的类型。
说它“返回一个指针”可能有点不精确。我发现使用 pointer 这个词作为形容词而不是名词来使用更为清晰。因此,我们可以拥有一个指针值,一个指针对象,一个指针类型,一个指针表达式等。一个指针值(某种指针类型的值)通常是一个地址(某些函数或对象的地址)-除非它是一个空指针值,一个无效的指针值或刚好超出某个对象末尾的指针。
答案 1 :(得分:0)
为什么在很多地方* p()被称为返回指针的函数而不是返回地址的函数?
这取决于所强调的内容。
int nabs(42)
返回-42。 int nabs()
返回int
。 int 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
混淆。