2017-02-22 18 views
0

У меня есть следующий код:Печать данных 2-х переменных с помощью указателя в коде ниже

#include <stdio.h> 
#include <stdlib.h> 

int *p; 

int main() { 
    int a = 4, b = 8; 

    p = &b; 

    //TODO: fill in the blank 
    printf("a = %ld\n", /*Fill in here */); 
    printf("b = %ld\n", /*Fill in here */); 

    return 0; 
} 

Как я могу напечатать значение 2 переменных a и b используя только p к ним доступ?

+1

Получить представление. Начните с чтения книги C. –

+0

Кроме того: где находится 'long', на который ссылается'% ld'? –

+0

'p = & b;' <- поэтому у вас есть 'p', указывающий на' b'. Распечатайте его, а затем сделайте то же самое для 'a':' p = & a; '. Возможно, прочитайте некоторые приличные [книги] (http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list) –

ответ

1

В общем, вы не можете сделать это с помощью текущего кода/подхода.

В стандарте C нет ничего, что гарантировало бы стратегию распределения памяти для двух или более независимых переменных, поэтому отслеживание местоположения предыдущей следующей памяти невозможно. Нет детерминированного способа вывести значение a, только Доступ к p.

Если вам нужно получить доступ к значениям более чем одной переменной (одного и того же типа) из одного указателя, подумайте о создании массива, где элементы, как гарантируется, будут находиться в смежной памяти, поэтому арифметика указателя имеет смысл, и мы может децинически достигать предыдущего элемента.

+0

Привет, я получил ответ. Просто используйте '* (p + 1)' для 'a' и' * p' для 'b'. Вы можете получить дополнительную информацию, используя поиск по Google или чтение некоторых книг по сегменту памяти =)) Извините за мой плохой английский. –

+0

@ HuyLê свою обязанность сообщить вам, что источник этой информации должен быть немедленно прекращен, но это не соответствует действительности. –

+0

ОК. Это моя вина. Я изучаю сегмент данных. И этот вопрос только заставляет меня понять механизм распределения области памяти для распределения сегмента данных. Это не совсем правильно, как вы сказали. Спасибо за помощь. –

Смежные вопросы