|
1
14
对于函数指针和对象指针,它们都会进行编译,但仅保证对同一完整对象的子对象的地址(可以比较类或数组的两个成员的地址)以及对函数或对象本身进行比较时,它们的结果是一致的。
使用
不过,所有这些都应该编译(尽管编译器可以自由地警告任何它想要的代码片段)。
因为函数类型没有
一元的
最后请注意,指向函数的指针 指针 不再是函数指针:
|
|
2
2
如果指针指向同一个分配,则可以比较指针。例如,如果有两个指针指向同一数组的元素,则可以对这些指针使用不等式比较运算符。另一方面,如果有两个指针指向不同的对象,那么比较是“未定义的”,尽管在实践中,大多数编译器可能只是比较地址。
|
|
|
3
1
#1个 :无法调用函数指针。 α2 :指针支持关系运算符,因为您可以在指针算术中使用它们并相互比较地址。实例:遍历数组
|
|
|
4
1
指针支持运算符<、>、<=、>,但只有当正在比较的两个指针是同一内存分配的一部分时(如将两个指针与数组分配中的索引进行比较),才能保证产生可靠的结果。对于这些,它指示分配中的相对位置(即,如果a<b,则a指向数组中比b低的索引)。对于不在同一分配中的指针,结果是实现定义的(在某些体系结构中,可能违反严格的低于映射所需的兼容性)。例如,如果单个分配不能超过32位指针所允许的大小,则可以将64位指针与仅使用较低32位的<或>进行比较。在函数指针的上下文中,这些实际上没有意义,因为它们不处理连续内存分配。 其他原始指针操作:==如果指针指向同一对象,则返回true。-生成两个指针之间的字节数(我认为只适用于相同的分配?).+不编译,因为它没有意义。 对于函数指针,它们可以被*取消引用并调用。 对于指向成员函数的指针,有运算符->*和。* |
|
|
5
0
指针表示为普通整数值。您可以使用指针执行所有操作,这在所有其他数值类型上也是允许的。+-*/<<>==^&!~%。希望我什么都没忘记。 函数指针只有在使用()运算符调用时才不同。 |
|
|
MaPo · Linux,设置锁定ICMP_过滤器选项 1 年前 |
|
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 1 年前 |
|
|
Bobby · 复合字面值总是左值吗? 1 年前 |
|
9-Pin · C: 嵌套结构的堆栈内存分配 1 年前 |