鱼C论坛

 找回密码
 立即注册
楼主: Tzdner_C

求帮俺解释下这个很蛋疼的问题?

  [复制链接]
 楼主| 发表于 2012-6-30 10:01:15 | 显示全部楼层

我那一句说建立.cpp就要用C了?我说我一直这样写,我喜欢,可不可以好好把别人的意思看懂哦。。。.cpp是C++文件,是兼容,但是也有少许的不同,你试试在.c文件里面写一个for(int i= 0;i<10;i++);试一下,看能编译过去吗?  不懂就不要乱说哦   
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-6-30 10:03:28 | 显示全部楼层
334584353 发表于 2012-6-30 09:46
新手表示看不懂,那头文件是啥?我直接复制你的,编辑器说有8处错误

你用的是VC还是VS?  建的什么工程?  若是建的.c文件,就用stdio.h若是建的.cpp就用stdafx.h。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-6-30 10:04:51 | 显示全部楼层
hy19970612 发表于 2012-6-30 09:31
define  好像 只能用作 替换的意思 !你自己替换后看看!

你还是算了吧~。。。我以为你牛X,批判了我半天能解决问题呢。。没想到说了一句废话。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-6-30 10:10:53 | 显示全部楼层
hy19970612 发表于 2012-6-30 09:28
大哥  宏定义 不是你这样 玩的!  你为何 要这样 看不清楚! 而且 新手 不推荐 用宏 看的 不清晰!还有宏 一 ...

所以说你不懂啊~!   宏定义是用来定义数字的。。。你不会用不代表别人用都是多余啊。 连静态变量也不懂,  I 服了 YOU ! 用M的值给静态变量初始化了,怎么了?  怎么没用了?  静态标量总得有个值吧?  初始化怎么了?  楼上有兄弟编译通过了。我在VC,VS上都试过,所以我真想不通,你用是什么编译器,怎么贴的代码,还有头文件要根据自己建立的文件区填。。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-6-30 10:15:37 | 显示全部楼层
hy19970612 发表于 2012-6-30 09:28
大哥  宏定义 不是你这样 玩的!  你为何 要这样 看不清楚! 而且 新手 不推荐 用宏 看的 不清晰!还有宏 一 ...

还有 一个带参数的宏吗  有什么看不懂的。。。把x用p替换了呗。。。。其他原样照搬。。。我就是想不通,你连静态变量也没看懂,宏也不会替换,这个还是非常非常简单的宏了。。。你怎么就敢莫名其妙的大言不惭的批判我呢????
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-6-30 14:53:47 | 显示全部楼层
如果哪位兄弟连这个题目正常来说结果应该是20都想不通。 那这道题目还是别看了。因为你真看不懂。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-6-30 16:43:33 | 显示全部楼层
chao_prince 发表于 2012-6-29 21:23
我试过好几个编译器,VS2010(命令行下), CODEBLOCK。。
最后我用了VC6.0还是错。。
test.c(7) : erro ...

这个问题应该把  static int p = m;  换成static int p ; p=m; 可以解决 error C2099: initializer is not a constant
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-6-30 16:48:11 | 显示全部楼层
2. 怎么能说一开始把p赋值给m。就说这个静态变量没有用呢? 这里虽然刚进来就给静态变量赋值了。 但是,这个赋值代码只有在这个函数第一次被执行的时候才会执行。再次调用这个函数的时候, 赋值代码是不会被执行的。 这是静态变量的基本特性。
   前面有大牛这么解释 小弟费解 还请各位赐教一下  
      这个赋值代码只有在这个函数第一次被执行的时候才会执行。再次调用这个函数的时候, 赋值代码是不会被执行的。 这是静态变量的基本特性   
    就是这句 不懂啊    我在网上查了一下 关于静态局部变量的 问题
            静态局部变量的特点, 可以 看出它是一种生存期为整个源程序的量。虽然离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用, 而且保存了前次被调用后留下的 值。

          拜谢赐教
  
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-6-30 17:33:35 | 显示全部楼层
一水一休 发表于 2012-6-30 16:48
2. 怎么能说一开始把p赋值给m。就说这个静态变量没有用呢? 这里虽然刚进来就给静态变量赋值了。 但是,这个 ...

你查出来的资料没有错啊。。。哪里还不解?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-6-30 19:17:21 | 显示全部楼层
Tzdner_C 发表于 2012-6-30 17:33
你查出来的资料没有错啊。。。哪里还不解?

要是我查的没错  那就是前面的DebugLove 所讲的第二点有错咯
是不是这样呀 楼主
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-6-30 19:26:56 | 显示全部楼层
一水一休 发表于 2012-6-30 19:17
要是我查的没错  那就是前面的DebugLove 所讲的第二点有错咯
是不是这样呀 楼主

唉!  你为什么就不明白呢? 你查的和人家说的不矛盾啊,人家说的是初始化,静态变量第一次调用的时候,初始化了,然后以后初始化的这行代码就不会被执行了。。。而你查出来的使用跟初始化是两回事啊,还是用例子说吧: 例如 int a = 5; 这是初始化,int a;   a = 5;这样是使用。。。。。明白不? 若明白了再去看上、上面我贴的代码。。。再想想人家说的对不对。。。不要钻牛角尖了,,,,人家是看着反汇编代码一步一步看出来的实现原理。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-6-30 19:33:40 | 显示全部楼层
一水一休 发表于 2012-6-30 16:48
2. 怎么能说一开始把p赋值给m。就说这个静态变量没有用呢? 这里虽然刚进来就给静态变量赋值了。 但是,这个 ...

编译错误,是因为你用的.c文件编译的。都说了用.cpp编译。c++编译方式。 拜托,能不能看清楚?  还有,已经说过了。如果你连这个题目正常来说结果应该是20都想不通, 那等你想通了再质疑?再回复。谢谢~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-2 20:15:59 | 显示全部楼层
因为您回了我之前发表的求解贴, 所以我也要回您一下, 虽然帮不了. 不过您这贴的回复我全部都看完了. 我认为啊. c作为广大高级语言的爷爷. 所以咱们得有个广阔的心... 因为您说话过于犀利, 不是所有人受教后会感激,.
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-3 18:17:51 | 显示全部楼层
#define FUCK_STATIC(x) *(&x+1) = 0

当函数调用时候,static int p  // p是静态局部变量,他的值不随着函数结束而释放啊!

p = m;

FUCK_STATIC(p);   //  *(&p+1) = 0   将p的地址下一个内存单元赋值为0

return p++;

数组a的元素分别是10 11 12 。。。。19


当执行printf函数的时候 p的值已经增加了 20  所以,输出的值应该是20!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-3 19:09:53 | 显示全部楼层
Message_Box 发表于 2012-7-3 18:17
#define FUCK_STATIC(x) *(&x+1) = 0

当函数调用时候,static int p  // p是静态局部变量,他的值不随着 ...

若是没有那个宏的话确实输出是20,但是有了那个宏输出就是1,问的就是这个。。。问的不是这个程序输出结果是多少?这个我自己试过的还用问人吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-3 22:20:10 | 显示全部楼层
楼主大神 你还没给我讲指针呢 学东西要谦虚 我也不是喷你 你回帖有时确实很小孩 都是学东西不应该互相指责 我并不是给你讲概念 上次只是指出引用返回是地址 我认为那人说的也没错 理解就应该像指针一样理解引用 如果我说不对你可以指出
好了 说正题  这题关键就看那个宏  看你学东西有自己想法 你应该想下静态变量一直被初始化为何只能被初始化一次  原因就是一个标志影响的 当再次初始化会查询标志 如果标志位1则不重新赋值  而显然这个宏 把标志清零了 表示并没有初始化才会被一直赋值而已

而且这个标志只是一个字节  8位 也就是你定义8个以上静态变量 会再次多出个标志
定义一个 一个位就置1
所以定义两个静态是3  3个静态是7
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-25 17:54:21 | 显示全部楼层
vc++6.0
*.cpp后缀
结果 20
求破
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-26 09:58:07 | 显示全部楼层
ccqiji 发表于 2012-7-3 22:20
楼主大神 你还没给我讲指针呢 学东西要谦虚 我也不是喷你 你回帖有时确实很小孩 都是学东西不应该互相指责  ...

怎么才看到这位仁兄回的贴    说的很不错。。。确实不错,或许我说话有些犀利,但是我是认技术的。。。说的对就是对,不对就是不对。。。。这个问题     就是你说的这样,一个标志位,那个宏把标志位清0了。。。尽管你说我回答很小孩,但是分还是要给你。。。因为你答对了。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-26 09:59:35 | 显示全部楼层
ccqiji 发表于 2012-7-3 22:20
楼主大神 你还没给我讲指针呢 学东西要谦虚 我也不是喷你 你回帖有时确实很小孩 都是学东西不应该互相指责  ...

靠    。 。。  看到的太晚  不能给分了。。。不好意思哦
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-9-21 15:37:08 | 显示全部楼层
LZ好:我想问下关于答案中所说的标志位问题,也就是 *(&p+1)这个地方指的就是静态局部变量p的标志位,VC下输出这个值65536,只要这个值不为0,结果就是20,只要为0 结果是1,对于这个标志位 楼主能说的详细点吗?为什么这个系统给定的值是65536呢???
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-14 02:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表