Я новичок в 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 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
}
}
}
Метод находки дает мне ошибку сегментации, скорее всего, потому что адрес не хранит INT значения. Есть ли способ узнать, какие данные типа хранятся в адресе памяти.
Есть ли лучший способ достичь аналогичной задачи? Пожалуйста, объясните и покажите. Фактическая программа не будет иметь int value = ??
, вместо этого метод поиска будет использоваться только для получения массива адресов, который содержит это значение.
Также, что является лучшим типом для хранения адресов int
или long
?
Вы можете вызывать * неопределенное поведение *. Результат будет зависеть от системы, и если адрес будет доступен для доступа к ОС, доступ к нему приведет к тому, что ваша программа будет убита ОС. Вы написали 'void main()', поэтому вы можете выполнить этот код в автономной среде, такой как микроконтроллеры (но 'printf()' там не поддерживается. Обратите внимание, что использование незаявленной функции в любом случае является плохим. – MikeCAT
Вы получаете доступ к нераспределенной памяти: это неопределенное поведение в C/C++, поэтому вы не можете проверить память таким образом. Кстати, размер int зависит от реализации: вы должны использовать 'sizeof (int) * 8' вместо 32 для увеличения вашего цикла. Почему вы хотите сделать это в первый раз? Возможно, мы могли бы предложить вам другой способ. – wasthishelpful
Лучшим типом для хранения адресов является указатель (соответствующему типу). 'int' и' long' могут иметь или не иметь совместимых представлений и соответствующих размеров. – Dmitri