int (*p) 和 int *p 之间有区别吗?
Is there a difference between int (*p) and int *p?
我刚刚了解了函数指针,要声明函数指针,您必须将*
与指针名称放在括号中,以确保它不会返回int *
。
两者之间有区别吗
int *p
和
int (*p)
我尝试用cdecl查找这个,但到目前为止没有运气。 cdecl 说这是一回事,但没有提供解释。如果我声明
short (*p)
这是短指针还是短指针?p
的大小是 2 字节还是 4 字节?我知道有人问过类似的问题,但到目前为止,我还没有运气。
两者之间会有区别吗
int *p
和
int (*p)
不。 这是编写同一类型的两种不同方式。 括号在这里并不神奇——它们只是用来覆盖优先级,就像算术运算符一样。
区别在于
int *p();
(声明返回int *
的函数"p"(和
int (*p)();
(声明指向返回 int
的函数的指针(。 如果没有*p
周围的括号,(空(参数列表与所声明的名称更紧密地关联。
如果我这样做了:
是短指针short (*p)
,还是指向短指针的指针?
p
是 2 个字节还是 4 个字节?
类似于int (*p)
它声明了一个指向short
的指针。 指针的大小特定于实现,但 4 字节和 8 字节是常见的选择。 指向的数据应该是short
的大小,这也是特定于实现的,但通常是 2。
近指针与远指针的概念是编译器供应商的特定概念(现在很少出现在一些奇怪的嵌入式系统之外;x86机器在移动到32位IIRC时放弃了它(。没有,也没有使用short
(意味着比正常指针更小(声明的"短指针"的概念,因为 C 的short
已经有了含义。short*
是一个正常大小的指针,指向一个short
大小的位置,仅此而已。
基本上,sometype (*p)
并不意味着与sometype *p
有任何不同。函数指针用 somereturntype (*p)(argument, types, go here)
声明;如果没有参数类型的括号,它根本不是函数指针。
#include <iostream>
using namespace std;
int main() {
// your code goes here
short (*p);
short *r;
printf("size - %u- %u",sizeof(p) , sizeof(r));
return 0;
}
为两者返回 4。
short (*p)
那将是一个指向空头的指针。在大多数情况下,取消引用时为 2 个字节。在现代计算机上,指针大小可能是 4 或 8 个字节。
s = 5;
short *p = &s;
您在使用它的上下文中没有区别。
括号用于强制运算符优先级。 如果不需要括号,例如在初始化中,则 short *p
和 short (*p)
都是等效的(两者都是指向内存中short
值的指针(。 指针的实际大小应该是统一的(并且大小与它们指向的数据成员不对应(,因为它们只是存储相关数据成员的地址。
如果您有指向对象的指针,则可能需要使用括号来强制优先级。 例如:
Object *myObject = new Object();
int myObjectSize = *myObject.size(); // INCORRECT: . operator has higher precedence than *
int myObjectSize = (*myObject).size(); // CORRECT: parentheses force precedence
当然,在这种特定情况下,myObject->size()
更常用(以避免过度使用括号(。
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 在 typedef 内部使用 const 关键字和在 typedef 外部使用 const 关键字之间有区别吗?
- 为什么这里的大括号和括号初始化有区别?
- 使用短运算符的字符串连接有区别吗?
- static_cast<unsigned>(签名)与标准::bit_cast<unsigned>(签名)之间有区别吗?
- 在调用函数时,ptr** 和 ptr*& 之间是否有区别,或者首选C++?
- 在类内和类外的定义处执行类转发声明是否有区别
- CRTP:为什么获得嵌套类型和派生类的嵌套方法有区别
- uniform_int_distribution <>和 <int>有什么区别?
- "long"和"long int"以及"long long"与"long long int"有什么区别
- "multiset<int, greater<int> > ms1"和"multiset<int> ms2(greater<int>())"有什么区别
- 新的int()和new int []有什么区别
- 忽略内存消耗,使用“int”或“char”是否有区别
- 开关情况下的字符和 int 有什么区别?
- int x{} 之间有区别吗?和整数 x = 0;
- int&a 和 int &a 之间有区别吗?
- int (*p) 和 int *p 之间有区别吗?
- void(int) 和 void(*)(int) 有什么区别?
- c++中的int* x和int* x有区别吗?
- int x[]和int *x有区别吗?