Как получить адреса определенных переменных? - PullRequest
0 голосов
/ 11 июня 2019

У меня есть некоторый код - я хочу посмотреть, как конкретные переменные помещаются в стек.

#include <iostream>
using namespace std;

int fun(char b, long c, char d){
short p,q,r;
int y;
/***return &b,&c,&d,&p,&q,&r,&y;***/ - this one was for purpose of what should be returned, it is not valid code}

int main(){
fun('a',123,'b');
return 0;
}

Ожидаемый результат - адреса определенных переменных, поэтому я использовал операнд &.Но, тем не менее, я не знаю, где правильно разместить его в своем коде, т.е. ОСНОВНУЮ функцию.

ЗАМЕЧАНИЕ: функция буквально НИЧЕГО не делает, это всего лишь упражнение для цели курса по компьютерной архитектуре.

Ответы [ 2 ]

3 голосов
/ 11 июня 2019

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

#include <iostream>
#include <map>
using namespace std;

map<const char*, void*> fun(char b, long c, char d) {
  short p, q, r;
  int y;
  return {
    { "b", &b },
    { "c", &c },
    { "d", &d },
    { "p", &p },
    { "q", &q },
    { "r", &r },
    { "y", &y },
    { "b", &b }
  };
}

int main() {
  auto results = fun ('a', 123, 'b');
  for (auto p: results) {
    printf("%s is at %p\n", p.first, p.second);
  }
}

Для меня это показывалось

b is at 0x7ffdec704a24
c is at 0x7ffdec704a18
d is at 0x7ffdec704a20
p is at 0x7ffdec704a36
q is at 0x7ffdec704a38
r is at 0x7ffdec704a3a
y is at 0x7ffdec704a3c

Помните, что, как отмечали другие, вы не можете использовать эти адреса в main!ИМХО, было бы гораздо лучше просто выполнить вызовы printf внутри самого fun.Но не беспокойтесь!Надеюсь, это поможет.

0 голосов
/ 11 июня 2019
#include <iostream>
using namespace std;

int fun(char b, long c, char d){
short p,q,r;
int y;
cout<<(void*)&b<<endl<<&c<<endl<<(void*)&d<<endl;
cout<<&p<<endl<<&q<<endl<<&r<<endl<<&y<<endl;}


int main()
{
fun('a',123,'b');
return 0;}

Хорошо, теперь я понял. Это решение.

...