Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
x64处理器上的C语法有何不同_C_Pointers_Memory_Gnu - Fatal编程技术网

x64处理器上的C语法有何不同

x64处理器上的C语法有何不同,c,pointers,memory,gnu,C,Pointers,Memory,Gnu,我正在读一本关于C和GNU的书,但它引用了32位处理器上的代码。我已经发现EIP实际上是64位的RIP,但当我处理指针时,它一直给我提供了很多信息。。。是否还有一些我不知道的差异???谢谢-指针代码- int j = 10; int *pointr; pointr = j; printf("in j has an adress of %p", pointr); 你的代码应该是 pointr = &j; 带pointr=j您正在为指针分配j的值,即10。当不使用内联汇编时,一个主要的

我正在读一本关于C和GNU的书,但它引用了32位处理器上的代码。我已经发现EIP实际上是64位的RIP,但当我处理指针时,它一直给我提供了很多信息。。。是否还有一些我不知道的差异???谢谢-指针代码-

int j = 10;
int *pointr;
pointr = j;

printf("in j has an adress of %p", pointr);
你的代码应该是

pointr = &j;

pointr=j
您正在为指针分配
j
的值,即
10

当不使用内联汇编时,一个主要的变化是指针大小。如果您的程序不明确地依赖于指针的大小,您通常应该可以

有关64位C/C++代码问题的详细列表,请参阅

在代码中,应使用:

pointr = &j;
事实并非如此。

除了一些变量(esp指针)的大小可能不同之外
这几乎不重要,但如果真的重要, 您应该使用
sizeof
来获取重要的尺寸

但是,您的代码可能应该使用
j
无论是64位还是32位

int j = 10; int *pointr;
pointr = &j;
printf("in j has an adress of %p", pointr);

C的语法在所有处理器上都是相同的

不同的是不同本地类型的大小。对于什么是允许的,有一些规则,但也有很多创造性的空间。特别是,指针在64位机器上的长度为8字节,而不是32位机器上的4字节。大多数32位编译器都将
int
long
视为32位类型;大多数64位编译器将
long
视为64位类型,值得注意的例外是Windows 64,其中
long
仍然是32位类型

请注意,您的代码应该是:

int j = 10;
int *pointr = &j;
printf("int j has an address of %p\n", pointr);

C是源语言,而不是指令集体系结构。它的语法独立于任何处理器。这个问题,也许应该重写为“我在指针上做错了什么?”或“在x64处理器上C语法有什么不同?”删除对其他处理器的所有引用,并根据所决定的内容。伙计,当有人问一个基本的编程问题时,所有答案同时出现的数量——还没有人提到这个问题;如果启用警告,则会通知您此类型的类型不匹配问题。对于gcc,请尝试使用
-Wall-Wextra
进行最大限度的诊断