#include <stdio.h>
void push(int *p,int a)
{
     int k;
     p[k++]=a;
     }
     
extern int k;
int main()
{
    int k=0;int a=10;
    int D[10]={0};
    push(D,a);
    printf("hello");
    }


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
共收到 17 条回复
镕羽 · #2 · 2012-8-14 18:51:16  回复 支持 反对
请问 为什么运行结果会如图所示啊?
谢谢大家~~
callmesb · #3 · 2012-8-14 19:17:56  回复 支持 反对
extern int k;
这个是什么
callmesb · #4 · 2012-8-14 19:19:39  回复 支持 反对
void push(int *p,int a)
{
     int k;
     p[k++]=a;
     }
这里面的k还没有初始化

点评

extern 加了后 貌似代表这个变量可以一、通用 我在main函数里初始化了 那运行结果貌似是写入内存错误,不过不晓得为什么  详情 回复 发表于 2012-8-14 19:34
镕羽 · #5 · 2012-8-14 19:34:13  回复 支持 反对
callmesb 发表于 2012-8-14 19:19
void push(int *p,int a)
{
     int k;

extern 加了后 貌似代表这个变量可以一、通用

我在main函数里初始化了

那运行结果貌似是写入内存错误,不过不晓得为什么

点评

主函数里的K和push里的K是分别定义的变量啊。你这K又不是全局变量,所有地方都能用,刚试了一下,在push给k初始化能成功运行  详情 回复 发表于 2012-8-14 19:48
reborn_cyl · #6 · 2012-8-14 19:38:56  回复 支持 反对
帮顶~~~同求答案~@~
紫凝雪儿 · #7 · 2012-8-14 19:48:23  回复 支持 反对
同求答案。。
callmesb · #8 · 2012-8-14 19:48:37  回复 支持 反对
镕羽 发表于 2012-8-14 19:34
extern 加了后 貌似代表这个变量可以一、通用

我在main函数里初始化了

主函数里的K和push里的K是分别定义的变量啊。你这K又不是全局变量,所有地方都能用,刚试了一下,在push给k初始化能成功运行
callmesb · #9 · 2012-8-14 19:53:58  回复 支持 反对
#include <stdio.h>
int k;
void push(int *p,int a)
{
     p[k++]=a;
}
int main()
{
    k=0;
int a=10;
    int D[10]={0};
    push(D,a);
    printf("hello");
return 0;
}
你看看这样改符合你要求么

点评

为什么 加extern 不行?表明 k 这个 参数 什么文件都可以用啊 肿么一运行 就出现那图了呢  详情 回复 发表于 2012-8-14 20:04
镕羽 · #10 · 2012-8-14 20:04:03  回复 支持 反对
callmesb 发表于 2012-8-14 19:53
#include
int k;
void push(int *p,int a)

为什么 加extern 不行?表明 k 这个 参数 什么文件都可以用啊

肿么一运行  就出现那图了呢

点评

extern貌似是调用别的文件里的参数哦。。。  详情 回复 发表于 2012-8-14 20:19
callmesb · #11 · 2012-8-14 20:19:53  回复 支持 反对
镕羽 发表于 2012-8-14 20:04
为什么 加extern 不行?表明 k 这个 参数 什么文件都可以用啊

肿么一运行  就出现那图了呢

extern貌似是调用别的文件里的参数哦。。。
maxOrder石 · #12 · 2012-8-14 21:02:28  回复 支持 反对
本帖最后由 maxOrder石 于 2012-8-14 21:10 编辑

松子说的是对的,extern只是引用的,据我所知,静态变量和全局变量在c中系统是自动初始化为0的,还有push函数里的k是局部变量,函数调用结束会消亡,作为push,肯定要将k定为全局变量。
晨钟暮鼓 · #13 · 2012-8-14 21:20:59  回复 支持 反对
牛 !!!!!!!!!!!!!!!!!!
晨钟暮鼓 · #14 · 2012-8-14 21:40:25  回复 支持 反对
擦     什么东西啊!!!!
jose · #15 · 2012-8-14 23:24:58  回复 支持 反对
extern 告诉编译器这个变量在别的文件里,如果你要使用extern变量,不需要在自己的文件里再声明int,当然就这个程序来说编译器会告诉你链接错误,因为“别的文件”不存在。
static 告诉编译器变量作用范围在本文件里,就你这种语义,可以用static,或者根本什么都不用(当然这不是个好的编程习惯)

点评

谢谢赐教  详情 回复 发表于 2012-8-16 00:16
vazor · #16 · 2012-8-15 01:41:13  回复 支持 反对
好好看看c书籍的作用域章节吧,骚年
creolophuss · #17 · 2012-8-15 12:08:02  回复 支持 反对
#include <stdio.h>
int k;
void push(int *p,int a)
{
     extern int k;
     p[k++]=a;
     }
     
;
int main()
{
    extern int k;
k=0;int a=10;
    int D[10]={0};
    push(D,a);
    printf("hello");
    }
镕羽 · #18 · 2012-8-16 00:16:29  回复 支持 反对
jose 发表于 2012-8-14 23:24
extern 告诉编译器这个变量在别的文件里,如果你要使用extern变量,不需要在自己的文件里再声明int,当然就 ...

谢谢赐教
回帖
B Color Image Link Quote Code Smilies
Command + Enter
快速回复 返回顶部 返回列表