Хранение адреса указателя в памяти - PullRequest
1 голос
/ 17 декабря 2011

Например, у меня есть:

char* a = (char*) malloc(sizeof(char));
char* b = (char*) malloc(sizeof(char*));

Как мне получить адрес a в памяти, начиная с адреса b?

Ответы [ 4 ]

1 голос
/ 17 декабря 2011

Позвольте мне предвосхитить это, сказав, что, поскольку b фактически указывает на char*, вы должны действительно объявить и инициализировать его следующим образом:

char** b = (char**) malloc(sizeof(char*));

, используя char**char*.Но если вы уже это знаете и по какой-то причине хотите, чтобы b имел тип char*, вы просто напишите это:

*((char**) b) = a;

, который обрабатывает b, как если бы он былchar**, так что вы можете хранить в нем char*.

1 голос
/ 17 декабря 2011

Зависит от того, что вам нужно (это не совсем понятно), вы можете сделать b = a, *b = &a (буквально, как вы просили, адрес a в память, начиная с адреса b) или *b = a.

1 голос
/ 17 декабря 2011

Если вы хотите, чтобы b указывал на указатель на char (как можно было бы узнать, посмотрев на ваш оператор malloc, где вы выделяете место для одного указателя на char ) тогда b должен иметь тип указатель на указатель на символ , например:

char*  a = (char*) malloc(sizeof(char));
char** b = (char**)malloc(sizeof(char*));

Насколько я понял, вы хотите получить адрес, на который a указывает место, на которое указывает b? Это будет выглядеть так:

*b = a;

Если вместо этого вы просто хотите, чтобы b был указателем на символ (как вы на самом деле объявили b), и хотите, чтобы он указывал на тот же адрес, что и a, затем сделайте это:

char* a = (char*)malloc(sizeof(char));
char* b = a;

То есть b указывает на то же место, что и a; но тогда вам также не нужно выделять место для b, потому что они просто указывают на один и тот же адрес в куче. Однако вам придется позаботиться о том, чтобы вы также только free пробел указали a и b один раз!

Я бы также предложил почитать идею указателей (например, здесь или здесь ).

1 голос
/ 17 декабря 2011

Не могли бы вы просто сделать *b = a?Или я неправильно понял вопрос?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...