C 使用指针在内存中迭代
我是C的新手;我有更多的Java背景知识。 我想尝试使用指针在内存中搜索值C 使用指针在内存中迭代,c,pointers,memory-address,C,Pointers,Memory Address,我是C的新手;我有更多的Java背景知识。 我想尝试使用指针在内存中搜索值 #include <stdio.h> void main(){ int value = 10; find(value); } void find(int value){ // will change this to return array of long or int depending on which is better int* intPointer; for(int
#include <stdio.h>
void main(){
int value = 10;
find(value);
}
void find(int value){ // will change this to return array of long or int depending on which is better
int* intPointer;
for(int i = 40000; i < 40400 ; i+= 32){ /* not sure if i do it like this or another way,
* the starting value, ending value and condition
* is just for testing purpose */
intPointer = (int*)i;
if(*intPointer == value){
printf("found value"); //will actually be storing it to an array instead
}
}
}
#包括
void main(){
int值=10;
发现(价值);
}
voidfind(int-value){//将根据哪个更好,将其更改为返回long或int数组
int*int指针;
对于(inti=40000;i<40400;i+=32){/*不确定我是这样还是那样做,
*起始值、结束值和条件
*只是为了测试的目的*/
int指针=(int*)i;
if(*intPointer==值){
printf(“found value”);//实际上将它存储到数组中
}
}
}
find方法很可能给我一个分段错误,因为地址没有存储int值。有没有办法找出存储在内存地址中的数据类型
有没有更好的方法来完成类似的任务?请解释并出示。实际程序将不会有int value=??
,而只有find方法将用于获取包含此值的地址数组
另外,存储地址的最佳类型是
int
还是long
?您在循环中伪造一个带有临时变量的指针。
搜索值的正确方法是使用两个参数:要搜索的值和包含要搜索的某些值的集合(例如数组)。无法以通用的可移植方式执行您尝试的操作。当您访问未分配给您的内存时,代码会生成未定义的行为 在简单的嵌入式系统上,这是可能的。首先,您需要全面了解系统内存布局以及编译器的工作方式。例如,您必须知道
int
在内存中是否总是4字节对齐,即RAM的起始/结束地址。如果MMU存在且处于活动状态,您还需要了解其工作原理
有没有办法找出存储在内存地址中的数据类型
不有几件事需要马上知道:
,至少不是你想要的方式 您可以调用未定义的行为。结果将取决于系统,如果操作系统允许访问该地址,则访问该地址将导致操作系统终止您的程序。您编写了
void main()
,因此您可能希望在独立的环境(如微控制器)中执行此代码(但那里可能不支持printf()
)。请注意,使用未声明的函数是不好的。您正在访问未分配的内存:这在C/C++中是未定义的行为,因此您不能以这种方式检查内存。顺便说一下,int的大小取决于实现:应该使用sizeof(int)*8而不是32来增加循环。你第一次为什么要这么做?也许我们可以向您推荐另一种方式存储地址的最佳类型是指针(指向适当的类型)int
和long
可能有也可能没有兼容的表示形式和足够的大小。你的问题有太多错误,我甚至不知道从哪里开始。记忆不是这样工作的。您访问的内存没有访问权限,因此出现seg错误。@MikeCAT我不知道void或returning 0有很大的不同,我对C完全陌生,我只是在尝试一个带有指针的简单应用程序。