我的代码在c和c++中的行为是不同的。
void *(*funcPtr)() = dlsym(some symbol..) ; // (1) works in c but not c++
int (*funcPtr)();
*(void**)(&funcPtr) = dlsym(some symbol..) ; // (2) works in c++
我不明白为什么第二次铸造工作在c++,而第一次铸造不工作在c++。在c++中,(1)显示的错误消息从void*到void*()的转换是无效的。
创建变量时,例如:
int x = 5;
它会存储在内存中的某个地方,很酷。
但是,当我通过执行以下操作更改变量的值时:
x = 10;
内存中发生了什么?
x的新值是否会覆盖使用相同内存地址的旧值?
或者新值被存储在新的内存地址中,然后旧地址被删除?
当我遇到指针时,这个问题就出现了。似乎使用指针更改变量的值与使用另一个值定义变量是相同的。
这是我的代码(大部分是注释(lol)):
#include "iostream"
int main()
{
int x = 5; // declaring and defining x to be 5
int *xPoi
在c++中,数组标识符是指针,而在java中,数组的标识符是引用变量(实际上是指针)。
假设有一个数组a和b。在java中怎么会允许这个操作:
a = b; //the reference that 'b' holds will be copied to 'a' so both a and b point to the same array
但在C++中,相同的操作将被视为无效的赋值。
如果a和b都是c++中的指针,为什么b保存的地址不会被复制到a
在C++中,我可以通过执行以下操作来更改特定类的运算符:
MyClass::operator==/*Or some other operator such as =, >, etc.*/(Const MyClass rhs) {
/* Do Stuff*/;
}
但是在C中没有类(默认情况下是内置的),那么,我如何才能只对一般函数进行操作符重载呢?
例如,如果我没记错的话,导入stdlib.h会得到->操作符,它只是(*strcut_name).struct_element的语法糖。
那么我如何在C中做到这一点呢?
谢谢。