English 中文(简体)
为什么没有点子?
原标题:Why are pointers not located on a stack?
  • 时间:2009-10-27 06:59:51
  •  标签:
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>)时,请您以英文字母缩略号打印,并使用<条码>%p时,请您将其印成六分数。 刚刚发生的情况是,六分之六没有写过任何信件,你对此作了错误解释。

归根结底,点数是一个变量。 就中枢结构而言,很显然,

记忆被定位为功能的所有变数都将留在 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:

  • Uses printf without including stdio.h
  • Uses void main
  • Uses %d for addresses
  • Uses %p with something other than a ptr-to-void

适当写一下,它就认为:

#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拥有大量登记册,汇编者能很好地优化,那么你可能看不出点子,就会把整个寿命花在登记册中。





相关问题
热门标签