用c语言玩指针

用c语言玩指针,c,pointers,memory,heap-memory,C,Pointers,Memory,Heap Memory,在c语言中,我们能用指针指向并寻址内存中的特定位置吗? 然后从另一个文件(另一个程序)修改它,并从任何地方查看它。 比如: 修改它: #include<stdio.h> void main(){ int *p; p= 12345678; scanf("%d",p); } #include<stdio.h> void main(){ int *p; p= 12345678; printf("%

在c语言中,我们能用指针指向并寻址内存中的特定位置吗? 然后从另一个文件(另一个程序)修改它,并从任何地方查看它。 比如:

修改它:

#include<stdio.h>

void main(){


   int *p;
   p= 12345678;
   scanf("%d",p);

}
#include<stdio.h>

void main(){


   int *p;
   p= 12345678;
   printf("%d", *p);

}
#包括
void main(){
int*p;
p=12345678;
scanf(“%d”,p);
}
查看它:

#include<stdio.h>

void main(){


   int *p;
   p= 12345678;
   scanf("%d",p);

}
#include<stdio.h>

void main(){


   int *p;
   p= 12345678;
   printf("%d", *p);

}
#包括
void main(){
int*p;
p=12345678;
printf(“%d”,*p);
}

否。操作系统中的每个进程都有自己的地址空间。
进程可以使用操作系统提供的通道进行通信。

如果您有兴趣了解更多信息,请查看IPC,即进程间通信。

常量volatile指针(指向某些内存)如何?如果我没有错,它将指向一些内存,在第一个程序中它不会改变(也不允许修改此内存),但该内存可以由另一个程序/进程等修改

编辑:

为了澄清,如果我们使用const volatile指针,它将做两件事

  • 在程序中,它不允许我们在初始化后更改它的值
  • 更重要的volatile关键字将不允许对读取进行某些编译器优化,并且每次程序访问它时都会从内存重新加载。这大大减少了可能的优化。但是,当对象的状态可能发生意外更改时,这是确保可预测程序性能的唯一方法

  • 不适用于现代操作系统。操作系统虚拟化并保护每个进程的内存,而您无法跨越这样的进程。要访问相同的内存,您需要使用操作系统特定的共享内存功能。但是,您不直接指定地址,而是给共享内存一个名称,然后通过该名称打开并访问它。非常感谢,这正是我想要弄明白的@EDTheProgrammerguy你能举例说明可以自由访问内存的操作系统吗?谢谢大家!@WernerHenze@mohannadalnono例如,是的,我就是这么想的,谢谢。是的,我很想多学一点,有没有初学者喜欢的参考书?我不记得大学里有没有专门的课本,但我现在会研究一下。对不起,我不能推荐任何特别的课本。不过,对于基础知识,你可以在网上阅读文章,然后再进一步,你可以搜索计算机科学和计算机工程课程及其幻灯片,我试图读取我手动确定的特定地址上的数据。这样它无论如何都可以工作,但前提是您要为arduino或其他开发板或嵌入式系统编写程序。但一般来说,系统编程就像@Jack Lilhammers toldYeah,这真的很有趣,所以像windows这样的现代操作系统阻止我们自由访问内存。但我在想,如果我们知道这样做的技术(阻止我们访问特定地址),那么我们可以以某种方式取消/暂停该技术。这是可能的吗?正如你所说,这将阻止我们,但只有在我们没有获得管理权限的情况下:)让我们跳过“干扰其他进程内存是件坏事”——你想学习。所以在windows或linux发行版等操作系统上,我们可以在获得适当权限后读取和修改其他进程内存,否则系统将阻止我们的尝试。在windows上,您只需使用OpenProcess、ReadProcessMemory、WriteProcessMemory函数来处理其他程序内存。在linux上,您需要从“/proc//mem”打开文件,并像普通文件一样读写。我想我可以录制一些东西,向您展示我的想法以及如何一步一步地使用其他进程内存。当然,如果你愿意的话。