在这个程序中,我创建了两个指针(a,b),指向x和y的内存地址。在函数中,我创建了它应该用来交换a和b的内存地址(所以是b=a和a=b)。当我编译时,它会给出一个错误(从'int‘到’int*‘的无效转换),这意味着什么?我正在传递指向函数的指针,还是将其作为常规int读取?
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
void pointer(int* x,int* y)// Swaps the memory address to a,b
{
int *c;
*
我试图找出以下前向声明在ANSI-C中是否有效:
第一个文件:
extern void * fptr; // opaque forward declaration.
int main (void) {
fptr = NULL; // set the function pointer to NULL
}
第二个档案:
typedef int (*fptr_t)(int);
fptr_t fptr; // real declaration of the function pointer
对我来说,这应该是无效的,因为如果用两种不同的类型声明了fptr,但是gc
这个问题不同于:
我写了一个像这样的类Test。
class Test {
private:
int *p;
public:
//constructor
Test(int i) {
p = new int(i);
}
Test & operator = (const Test &rhs) {
delete p;
p = new int(*(rhs.p));
我知道,在c中,自引用结构是允许的,但不允许自包含结构。借用示例
无效:
struct a
{
int someVar;
a bad;
};
有效:
struct a
{
int someVar;
a* good;
};
但是在Java中,以下类是有效的:
class Node {
int val;
Node next;
}
这看起来更像c中的无效示例。我的问题是:为什么这在Java中是合法的?
我觉得这与以下事实有关:在Java中,您只能访问引用(比如指针),而不是实际的对象,但我仍然不完全理解这一点。而搜索“Java中的自引用”并没有给出大量
我的示例代码如下所示。
type Apple struct {
Color string
}
//In this way, the code runs just fine.
func main(){
var test = 6
TestTest(&test)
fmt.Println(test)
a := Apple{"red"}
Eat(&a)
fmt.Println(a.Color)
}
func TestTest(num *int) {