void main(){
int i,k;
char* p;
int j;
printf("address of i is %d
address of k is %d
address of p is %p
address of j is %d", &i,&k,&p,&j);
}
当我尝试上述法典时,j地址是4个单位以下。 但是,现在的地址并不接近。 由于点子是能够储存4个数据的一种惯性变数,因此为什么在与其他3个变数一样的 st头上分配?
void main(){
int i,k;
char* p;
int j;
printf("address of i is %d
address of k is %d
address of p is %p
address of j is %d", &i,&k,&p,&j);
}
当我尝试上述法典时,j地址是4个单位以下。 但是,现在的地址并不接近。 由于点子是能够储存4个数据的一种惯性变数,因此为什么在与其他3个变数一样的 st头上分配?
你应该把产出重新投入。 我怀疑,由于你重印的多数地址都以黑体表示(使用 %d),而<代码>p则以黑体表示(使用 %p)。
使用<代码>%p印刷所有地址。
Spoiler: It is on the ack.
我刚刚在我的电脑(从乌兰巴托9.04)上尝试过你的密码,接着说:
address of i is 0xbf96fe30
address of k is 0xbf96fe2c
address of p is 0xbf96fe28
address of j is 0xbf96fe24
在略微修改法典之后:
void main(){
int i,k;
char* p;
int j;
printf("address of i is %p
address of k is %p
address of p is %p
address of j is %p
", &i,&k,&p,&j);
}
既然你们的印刷版都用在你身上,就应该用百分比而不是百分比。 你们是否可以误解你们的成果?
当您使用<条码>%d
归根结底,点数是一个变量。 就中枢结构而言,很显然,
记忆被定位为功能的所有变数都将留在 st头上。 并且
没有理由说,就上述案件而言,点人不应站在一边。 其一例错误解释名誉和从gcc发出警告。 其一例是开端人,他们无视危险警告是无益的。 在有些情况下,它们相当于汇编错误。
I can t help but tell you that your program is one of those that "should be indented six feet and covered with dirt." (google for who said it when and why:-) It is a prime example of sloppyness for the following reasons, most of which are causing undefined behavior:
适当写一下,它就认为:
#include <stdio.h>
int main (void)
{
int i, k;
char *p;
int j;
printf ("address of i is %p
", (void *)&i);
printf ("address of k is %p
", (void *)&k);
printf ("address of p is %p
", (void *)&p);
printf ("address of j is %p
", (void *)&j);
return 0;
}
点数可能或可能不会位于点数上,因为它们也是某些变量。 请注意,这些变量是,不是大的变量。 如果CPU/MCU拥有大量登记册,汇编者能很好地优化,那么你可能看不出点子,就会把整个寿命花在登记册中。