我刚刚开始学习c中的指针。我有以下几个疑问。如果我找到以下问题的答案。了解c中指针的概念对我来说非常有用。提前致谢。
我)
char *cptr;
int value = 2345;
cptr = (char *)value;
上面的代码片段中 (char *) 的用途是什么以及它的含义。
二)
char *cptr;
int value = 2345;
cptr = value;
这也编译没有任何错误。那么 i 和 ii 代码片段之间有什么区别
iii) &value
是返回变量的地址。它是RAM中的虚拟内存地址吗?假设另一个并行运行的 C 程序,该程序是否可以具有与 &value
相同的内存地址。每个进程可以有与其他进程相同的重复内存地址并且彼此独立吗?
四)
#define MY_REGISTER (*( volatile 无符号字符*)0x1234)
void main()
{
MY_REGISTER=12;
printf("value in the address tamil is %d",(MY_REGISTER));
}
上面的代码片段编译成功。但它输出段错误错误。我不知道我犯了什么错误。我想知道如何使用指针访问随机地址的值。有什么办法吗?程序的地址真的是0x1234吗?
v) printf("value at the address %d",*(236632));//考虑地址 236632 可用
//堆栈
为什么上面的printf语句显示错误?
最佳答案
这是一个类型转换,它告诉编译器将一种类型视为其他(可能不相关)类型。至于结果见下面第2点。
这使得
cptr
指向地址2345
。现代操作系统隔离进程。一个进程中的一个变量的地址在另一进程中无效,即使是使用同一程序启动也是如此。事实上,由于Address Space Layout Randomisation (ASLR),第二个进程可能具有完全不同的内存映射。 .
这是因为您尝试写入地址
0x1234
,该地址在某些系统上可能是有效地址,但在大多数系统上并非如此,而且在运行例如Windows 或 Linux。
关于c - 关于指针和内存访问的疑问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20090030/