猿猿_yzg 2018-10-24 09:48 采纳率: 100%
浏览 491
已采纳

C语言栈相关,指针操作以及局部变量函数返回的相关问题

#include
void test2(int *l){
printf("l:%p,*l:%d\r\n",l,*l);
int mm[10]={1,2,3,4,5,6,7,8,9,10};
printf("mm:%p,l:%p,*l:%d\r\n",mm,l,*l);

int m=*l;
printf("m:%d\r\n",m);

}
void test(int a){
int b = 5;
*a = &b;
printf("a:%p,*a:%p,
a:%d\r\n",a,*a,**a);
}
int main(void){
int ptr2 = NULL;
test(&ptr2);

int mm[10]={1,2,3,4,5,6,7,8,9,0};

printf("m:%p,*m:%p,
*m:%d\r\n",&ptr2,ptr2,*ptr2);
test2(ptr2);
printf("m:%p,*m:%p,**m:%d\r\n",&ptr2,ptr2,*ptr2);
return 0;
}
问题1:test2函数中mm数组的元素个数少于10个的时候, printf("m:%d\r\n",m);的结果m是5
当超过10个元素的时候,printf("m:%d\r\n",m);的结果m是10,这是为什么?
问题2:这里边在test函数中b变量是局部变量,在test函数结束后局部变量b应该从栈中弹出了,为什么在test2中还可以访问到?推测原因是因为弹栈只是将栈顶指针移动了,b的地址上的值并没有清空,不知道这么想对不对?

  • 写回答

1条回答 默认 最新

      报告相同问题?

      相关推荐 更多相似问题

      悬赏问题

      • ¥15 在matlab中如何进行三个参数的离散傅里叶逆变换(idft)
      • ¥15 遇到问题了,求解答!
      • ¥15 请问coppliasim eduUR5视觉抓取怎么实现仿真,
      • ¥30 JavaWeb实验(购物平台)
      • ¥15 八路抢答器倒计时设计时显示器不输出,只能显示0
      • ¥15 用C语言随机生成一个迷宫
      • ¥15 超多因素的正交方案设计
      • ¥15 Scratch~汽车小游戏
      • ¥30 OSGB转换为3dtiles
      • ¥25 用于Audio的芯片中“Audio Interface”和“Mode Control”是什么?