【问题标题】:changing pointers(increasing , decreasing)?改变指针(增加,减少)?
【发布时间】:2014-08-19 11:19:17
【问题描述】:

下面的程序显示 *q=46 但 q 指向一个未定义的地址,因为它指向:p-1 所以它不是指向 p 或 m 而是另一个地址(因为 -1) 那怎么可能*q=46 我认为它必须有一个基于我所学的垃圾号码 我希望你能明白我想说的话,因为我不是母语人士

int m = 44;
int* p = &m;
int& r = m;
int n = (*p++);
int* q = p – 1;
r = *(--p) + 1;
++*q;

一旦程序运行,练习需要上面每个变量和指针和引用的数量 我用一个程序测试了它

输出:

p=0022fa00
*p=46
&p=0022f9f4
&n=0022f9dc
n=44
m=46
q=0022fa00  <<<<<<<
r=46
*q=46  <<<<<<<
&m=0022fa00

我认为这可能是因为 int n=(*p++) 但我认为这不应该是原因,因为该语句必须增加 p 中的数字而不是地址

【问题讨论】:

  • @user3783574 请考虑阅读help center 的格式指南并阅读How to Ask,这将极大地帮助您更快地获得问题的答案。

标签: c++ pointers reference


【解决方案1】:
int m = 44;//m=44
int* p = &m;//p has address of m *p=44
int& r = m;// r is allias(nickname) of m (*p m r is same)=44
int n = (*p++);//n=44 *p=garbage m=44 r=44 p is m's address+1
// *p++ means give *p then increase p(not *p)
int* q = p - 1;//q shows m's address *q=44
r = *(--p) + 1;//*(--p) means m r= m+1=45 r=45 m=45 because r is allias of m *q=45
++*q;//increase r=46 m=46 (*q)=46

这就是那里发生的事情。我希望这会有所帮助。

【讨论】:

    【解决方案2】:

    我认为可能是因为 int n=(*p++) 但我认为这不应该是原因,因为该语句必须增加 p 中的数字而不是地址

    不。 *p++*(p++),而不是 (*p)++

    【讨论】:

    • oookay 不知道,但是括号中的 * 没有超出它,这不会有什么不同吗?
    猜你喜欢
    • 1970-01-01
    • 2013-07-26
    • 2019-05-22
    • 2011-11-27
    • 2017-10-19
    • 2013-06-13
    • 2021-03-04
    • 2015-12-14
    • 1970-01-01
    相关资源
    最近更新 更多