谁能讲讲c里变量的声明和定义有怎样的区别?

来源:百度知道 编辑:UC知道 时间:2024/06/11 18:48:09

这个问题其实以前有人问过,还算是个比较高深的问题了。

其实这和计算机内存管理有关,任何一个变量的声明实际做的操作是在内存中开辟了一个空间,比如int a;就在内存中开辟了一个int型小存贮单元。这个时候就算你不定义它,比如下面这样:

int a;
printf("%d\n", a);

程序是不会出错的,你可以看到a打印出值,但可能是个随机的,也可能是0.简单点说声明其实就是开辟内存,定义其实就是想这个内存里面赋值,包括指针也一样,为什么这么做,说清楚这一点需要一定的知识积累。等你学的更多的时候在去看看操作系统,学习学习内存管理(最好看linux源代码)就会明白的,现在说的话,有点早。

生命就是所谓的函数原形,因为C要求限定以后使用所以声明可以算是隐式定义,比如:
void fun(int a);
int main(void)
{
fun(6);

return 0;
}

这段代码在编译过程中不会有错,因为没有语法错误,但是通不过链接,因为方法fun()只有过声明而没有定义,需要定义,比如:
void fun(int a);
int main(void)
{
fun(6);

return 0;
}

void fun(int a)
{
printf("%d",a);
}

才可连接成为完整的exe。需要说明的是,如果方法的定义在使用之后的话就一定要声明,但是如果在使用前(也就是目视的在它上面),则声明是可选的。

定义就实现了它的功能,声明仅仅说明这个东西存在,具体并没有实现它
函数声明格式
int function(int, int);
函数定义格式
int function(int a, int b)
{
return 0;
}