C语言全局变量的问题

来源:百度知道 编辑:UC知道 时间:2024/06/01 08:20:35
#include<stdio.h>
#define size 20
int find(int data,int n,int *p);
void insert(int *p,int n,int data,int pos);

void main()
{
int a[size],i,n,z,*p;
p=a;
printf("输入数据个数:");
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
printf("插入前的数据元素为:\n");
for(i=0;i<n;i++)
printf("%d\n",a[i]);
printf("输入要插入的数:");
scanf("%d",&z);
insert(a,n,z,find(z,n,a));
printf("插入后数据为:\n");
for(i=0;i<n+1;i++)
printf("%d\n",a[i]);

}
int find(int data,int n,int *p)
{
int i;
for(i=0;(i<n)&&(data>*p);i++,p++);
return (i);
}

void insert(int *p,int n,int data,int pos)
{
int i;
for(i=n-1;i>=pos;i--)
*(p+i+1)=*(p+i);
*(p+pos)=data;
}
这个程序里的 p和n 好像并没设为全局变量,为什么为全局变量啊,请高手指点

int a[size],i,n,z,*p; 这是在MAIN函数的开头就定义了,所以他的作用域是整个程序,也可以看成是全局变量了,在这里它们也是调用函数用的实参

p和n没有为全局变量啊
只不过在不同的函数中 可以用同一个变量名定义不同的局部变量而已,它们之间互不干扰,因为函数结束时,里面的变量也就会自动结束生命

自定义函数中已经把它再定义了一次 比如 void insert(int *p,int n,int data,int pos) 中已经把p重新定义为一个指针,再用它就是以指针的身份了。

它在主函数里定义了。

局部变量和全局变量是根据使用范围来区分的。
1。局部变量

他是 指在函数内部定义的变量 作用域为定义局部变量的函数 也就是说他只能在定义他的函数中使用

最值得注意的是 只有在程序执行到定义他的模块时才能生成,一旦执行退出该模块则起变量消失

eg.

func ()

{
int x; 局部变量x的作用域 很明确
......
}

2。全局变量

在程序执行的过程中一直有效

eg.

int x=1;

func ()

{
x=x+1;

}

func1 ()

{
x=x-1;

}

main ()

{

}
由此不难看出整型x的作用范围

对于全局变量 如果在定义的时候不做初始化 则系统将自动为起赋值 数值型为0

字符型为空'\0'

全局变量的弊端 增加内存开销 降低函数的通用性

定义全局变量时 理想的位置是在文件的开头 当这些函数以及同一个程序中的其他源程序文件中的某些函数需要使用该