下面的程序显示* 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中的数字而不是地址
答案 0 :(得分: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
这就是那里发生的事情。我希望这会有所帮助。
答案 1 :(得分:0)
我想也许是因为int n =(* p ++)但我认为不应该是因为该语句必须增加p中的数字而不是地址
不。 *p++
为*(p++)
,而不是(*p)++
。