C题目请教,多谢!

Hustjy2008 2008-03-06 09:55:20
看了个程序,有点不明白,请教!
#include <stdio.h>
static int i = 0;//此处不能为0
void f()
{
static int i = 28;
}
int main()
{
int* p = &i;
printf("sizeof(int)=%d\n",sizeof(int));
++p;
printf("*p=%d\n",*p);

return 0;
}
1)首先static int i = 0;//此处不能为0,为什么不能为零?
2)为什么输出的是局部静态变量的值?为什么指针p加"1"后指向了局部静态变量i?谢谢
...全文
170 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
linlan999 2008-03-08
  • 打赏
  • 举报
回复
感觉两个问题都没意义!
第一个,可以为任何值;
第二个,是不确定现象,只是巧合。
visame 2008-03-08
  • 打赏
  • 举报
回复
为什么不能为0?static int i = 0;也是正确的.
只能说没有必要赋值为0.因为会自动初始化为0.
jhappen 2008-03-08
  • 打赏
  • 举报
回复
都错了,静态局部变量虽然在函数内部定义,但却是驻留在全局数据区的,所以静态全局变量的下一地址就是静态局部变量的地址,而全局数据是比局部数据先建立的.
而为什么 "static int i = 0;//此处不能为0"
因为static int i = 0是全局作用的,而静态局部变量是默认初始化的值为0;
独孤过儿 2008-03-08
  • 打赏
  • 举报
回复
/* 懒得自己写,google的 */
在C语言中,关键字static有三个明显的作用:

1 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。

2 在文件内(但在函数体外),一个被声明为静态的变量可以被文件内所用函数访问,但不能被文件外其它函数访问。它是一个本地的全局

变量。

3 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。大

多数应试者能正确回答第一部分,一部分能正确回答第二部分,同是很少的人能懂得第三部分。

静态和非静态这两者的区别虽在于非静态全局变量和函数的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变

量和函数在各个源文件中都是有效的。

而静态全局变量和函数则限制了其作用域,即只在定义该变量和函数的源文件内有效,在同一源程序的其它源文件中不能使用它。

由于静态全局变量和函数的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。
羽中漫步 2008-03-07
  • 打赏
  • 举报
回复
p加"1"后指向了局部静态变量i纯粹是巧合.
大写的池 2008-03-07
  • 打赏
  • 举报
回复
5l 解释不准确,我认为lz的结果只是巧合,另外 静态变量编译器会自动初始化值为0;
hastings 2008-03-07
  • 打赏
  • 举报
回复
如果编译器处理的时候不是这么处理的话,那怎么办?这不是标准.
gauppo 2008-03-07
  • 打赏
  • 举报
回复
不是巧合,函数调用栈,入栈的顺序是全局变量-》函数局部变量
按照函数的声明顺序
请参照一下程序理解:

#include <stdio.h>

static double i = 0
static int k = 0;
static int m = 0;

void f0()
{
static int j0 = 3546;
static int j1 = 56;
static int j2 = 67;
}

void f1()
{
static int j = 28;
}
int main(void)
{
int* p = &i;
++p;
++p;
++p;
++p;
printf("*p=%d\n",*p);

return 0;
}


输出:*p=3546
hastings 2008-03-06
  • 打赏
  • 举报
回复
都是放在静态数据存储区,
p加"1"后指向了局部静态变量i纯粹是巧合.
dubiousway 2008-03-06
  • 打赏
  • 举报
回复
!

函数没起作用阿
baihacker 2008-03-06
  • 打赏
  • 举报
回复
如果为零的话,放的地方不同,可能是未初始化数据段.

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧