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

C 为什么在这么多地方*p()被称为返回指针的函数,而不是返回地址的函数?,c,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) = &func

我在很多地方看到代码
*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
对于为什么调用返回指针的函数,有一个简明的解释

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

这取决于所强调的内容


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

这些是将返回描述为值、类型、数据类和数据区域的不同方式

intnabs(intx){
如果(x<0)返回x;
返回-x;
}

同样地,
int*funcX(void){
返回值
&x
,一种类型的
int*
或指向
int
的指针,一个数据类1作为地址或对象

在C语言中,指针类型有精确的含义,而地址则没有

指针类型可以从函数类型或对象类型派生,称为引用类型。指针类型描述其值提供对引用类型的实体的引用的对象。从引用类型T派生的指针类型有时称为“指向T的指针”。从引用类型构造指针类型enced类型称为“指针类型派生”。指针类型是完整的对象类型。C11§6.2.5 20


1不与C++ >代码>类< /代码>混淆,它具有非常特殊的含义。< /p> 在C中,地址是指针类型的值。

例如,一元地址运算符
&
生成其操作数的地址,以及指向某个_类型的指针类型的表达式,其中某个_类型是操作数的类型


说它“返回一个指针”可能有点不精确。我发现更清楚的做法是将“指针”一词用作形容词,而不是名词。因此,我们可以有指针值、指针对象、指针类型、指针表达式等。指针值(某指针类型的值)通常是地址(某个函数或对象的地址)--除非它是空指针值、无效指针值或刚过某个对象末尾的指针。

“函数不是返回指针,而是返回地址”–有什么区别?你不同意
int*
是指针类型吗?指针是用来通过地址访问某处的东西。地址,嗯,它只是一个地址。仍然看不出问题在哪里。
&x
int*
funcX
返回
int*
int*
是指向
int
的指针。我不确定你是从哪里得到这个想法的,但听起来不正确。“地址,嗯,它只是一个地址。”——>把指针当作有效地址。
&x
是一个指针和地址。
(int*)rand()
是一种将任意值转换成指针的尝试。
int nabs(int x) {
  if (x < 0) return x;
  return -x;
}