该主题的标题也可能是"size_t足以容纳地址吗?"
我正在尝试获取结构与其中一个字段之间的偏移量,并且我使用size_t变量来保存偏移量:
size_t offset = (size_t)&struct.field - (size_t)&struct;
Run Code Online (Sandbox Code Playgroud)
我知道这有点强迫,我只是想知道我是否会因此而遇到某种错误.我知道我可以使用int做同样的事情,但我想知道它是否可以在64位系统上保存地址.
你对此有何看法?
今天出于好奇,我尝试了一些非常奇怪的东西:
代码 :
int num = 2;
int * point = #
printf("%p\n" , &point);
Run Code Online (Sandbox Code Playgroud)
问题:
1)我做的第一件事是我将变量的地址附加num到指针point,之后我printf()用来打印出指针中的地址存储point.
2)稍后,我只是尝试修改代码(Above Code)以查看它将给出的行为,即通过使用printf()打印出指针的地址point而不是打印出指针中的地址存储,point这是变量的地址num.
3)尽管地址与变量的地址不同,它仍会打印我的地址num,只是想知道这个行为是否在C标准中得到了很好的定义?为什么指针也有自己的地址因为我认为它的工作是存储其他变量地址.
感谢您花时间阅读本文.
我正在编写一个访问另一个进程内存的简单程序.我一直在使用内存编辑器来查找我希望程序检索并使用ReadProcessMemory函数的变量的地址.到目前为止,没有任何问题,但我不确定值的地址是否可能会根据正在运行其他程序的环境而改变.
除了对程序本身的更改,我应该关注这个吗?我注意到我的内存编辑器保存了相对于.exe位置的地址(例如program.exe + 198F6C),我很乐意这样实现我的程序,但我找不到任何方法来检索当前的C++中program.exe的地址.
请参阅以下代码:
#include <vector>
#include <iostream>
int main(int argc, char *argv[]) {
std::vector<double> obj(10,0);
std::cout << &obj << std::endl;
std::cout << &obj[0] << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
我想知道这两个地址之间的区别并谢谢!据我所知,对于一个阵列状a[5],&a<=> &a[0]<=> a.
简化问题:
程序员是否可以跟踪变量的地址,以便变量的地址可以用作该变量的数据点?
原始问题:
我试图围绕如何使用Go中的指针存储和引用地址引用变量.
作为一般原则,直接分配变量的地址是否有用?我可以想象一种情况,即数据可以在变量的物理(虚拟)地址中编码,而不一定是该变量的值.
例如,第1000位客户已经购买了500美元.我可以在1000位置存储一个值为500的整数吗?
我知道做这样的事情的常用方法是使用数组,其中位置999的变量对应于第1000个客户,但我的问题不是数组,而是直接分配地址.
假设我正在处理数十亿个对象.有没有一种简单的方法可以将地址用作对象数据的一部分,并将该位置存储的值作为不同的数据?
例如,地址135851851904处的int保持值为46876,135851851905保持123498761等.我想在这一点上,数组或切片太大而不能有效.
顺便说一句,如果我的问题是由于误解,是否有人可以提供哪些资源以深入但可理解的细节解释主题?我一直无法找到真正解释细节的主题资源.
*编辑以澄清该数组未知
如果未知整数数组的地址是0x00006ffd29c78e70(整数为4字节),则元素数组[1]的地址是多少?
提前谢谢了。
考虑以下代码片段。
int main(){
int x[2];
x[0]=100;
x[1]=200;
printf("%d\n",x);
printf("%d\n",&x);
printf("%d\n",*x);
}
Run Code Online (Sandbox Code Playgroud)
输出为(在三行中)
6487616 6487616 100
Run Code Online (Sandbox Code Playgroud)
我读过数组名称是指向数组第一个元素的指针。因此,'x' 的值打印了一个内存地址。但是,如果我尝试打印保存数组第一个元素地址的指针的地址,为什么还会打印相同的内存地址?它不应该打印另一个内存地址,仅仅是因为为了让变量存储内存地址,它应该是一个指针,并且该指针变量在 RAM 中也有一个内存地址。
int main(){
int y = 10;
int *p = &y;
printf("%d\n",&y);
printf("%d\n",&p);
}
Run Code Online (Sandbox Code Playgroud)
上面的代码给出的输出为
6487628 6487616
Run Code Online (Sandbox Code Playgroud)
那么为什么这对数组不起作用呢?
我正在学习 C 语言的指针,我有一些问题。
#include <stdio.h>
int main()
{
char c = 'A';
char* pc = &c;
char** ppc = &pc;
printf("%p %p\n", pc, ppc);
printf("%p %p\n", pc + 1, ppc + 1);
printf("%p %p\n", &c, &c + 1);
printf("%p %p\n", &pc, &ppc);
printf("%p %p\n", &pc + 1, &ppc + 1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在这段代码中,让我们说
&c = 0117FE7B
&pc = 0117FE6C
&ppc = 0117FE60
Run Code Online (Sandbox Code Playgroud)
我以为有些答案会是这样的:
ppc + 1 = 0117FE6D
&pc + 1 = 0117FE6D
&ppc + 1 = 0117FE61
Run Code Online (Sandbox Code Playgroud)
但正确的答案是这样的: …
#include <stdio.h>
#define max_size 100
float array[max_size];
int n,counter;
int main(){
printf("Enter the size of the array...\n");
scanf("%d",&n);
for (counter=0; counter<n; counter++){
printf("%p\t",&array[counter]);
}
printf("\n\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我只是在试验这个 C 程序,我试图验证浮点数的大小是否为 8 个字节。但是在使用数组中的 5 个元素运行此代码时,我得到这些元素的地址如下:
Enter the size of the array...
5
0x555555755040 0x555555755044 0x555555755048 0x55555575504c 0x555555755050
Run Code Online (Sandbox Code Playgroud)
正如你看到的第一个浮点数,我的系统已经分配了内存空间 ...40,41,42,43 如果我没记错的话,这是 4 位的空间。但是 float 数据类型应该有 8 个字节的空间。我认为该程序应该为 2 个字节的空间分配内存空间 ...40,41,...4F。所以
...40-...4F //for first 2 bytes
...50-...5F //for second 2 bytes
...60-...6F //for third 2 bytes
...70-...7F //for last 2 bytes
Run Code Online (Sandbox Code Playgroud)
所以第二个地址将从 …
这更像是一个请帮助我理解而不是调试问题。所以,我最近开始研究 C,在使用指针的时候我遇到了这个案例。
#include <stdio.h>
int main()
{
char *name="Bob";
for(int i=0;i<3;i++)
{
printf("Address is %0x and value is %ld",name,*name);
printf("\n");
name++;
}
printf("\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我运行了 3 次程序并得到了类似的输出 -->
Address is 9a756008 and value is 66
Address is 9a756009 and value is 111
Address is 9a75600a and value is 98
Address is ba49d008 and value is 66
Address is ba49d009 and value is 111
Address is ba49d00a and value is 98
Address is 2cb44008 and value is 66
Address …Run Code Online (Sandbox Code Playgroud)