C语言里声明是什么意思?

Python09

C语言里声明是什么意思?,第1张

什么是声明:有两重含义,如下:

第一重含义:告诉编译器,这个名字已经匹配到一块内存上了(伊人已嫁,吾将何去何

从?何以解忧,唯有稀粥),下面的代码用到变量或对象是在别的地方定义的.声明可以出

现多次.

第二重含义:告诉编译器,我这个名字我先预定了,别的地方再也不能用它来作为变量

名或对象名.比如你在图书馆自习室的某个座位上放了一本书,表明这个座位已经有人预

订,别人再也不允许使用这个座位.其实这个时候你本人并没有坐在这个座位上.这种声

明最典型的例子就是函数参数的声明,例如:

void fun(int i, char c)好,这样一解释,我们可以很清楚的判断:a)是定义b)是声明.

最好吧函数声明放在头文件的下面。不管用不用,值要用了调用函数就在头文件下声明下。不然你写调用函数嵌套很容易出现函数声明类型出错等问题的。

如果需要将函数定义放在函数调用后,可以采用函数声明。函数声明的格式为:返回值类型符 函数名称(形式参数列表)其中根据函数的不同,返回值类型可能是void(没有返回值),形式参数也可能是void(没有函数参数)。总之函数声明和函数定义部分的函数头格式基本相同,但函数声明在末尾有一个分号。函数声明里的形式参数可以只写类型而省略名称。函数声明可以位于主调函数的定义部分

函数声明也可以在函数外部,这样声明的特点是:当前文件从声明位置到文件结束的任何函数中都可以调用该函数。

函数定义和函数声明是完全不同的。函数定义包括函数头和函数体,完整的定义了函数的输入、输出和具体实现;函数定义一定包括一对大括号。而函数声明是为了编译的需要。总之只要理解了编译的特点,就比较容易理解声明的必要性和声明的有效范围。

假设主函数main()。其他函数void fun(int a,int *b)。

关于函数定义和声明:

在代码中fun函数,有完整函数体的代码就是函数定义部分,比如void fun(int a,int *b){。。。};。

如果没有具体实现的函数体代码(也就是大括号内容),那么就是函数声明。比如void fun(int ,int *);

关于函数声明和调用:

如果fun函数定义在main代码上面。比如:

void fun(int a,int *b){。。。};

int main(){

int a=0,int b=0

......

fun(a,&b)//这里fun定义代码在main上面,所以可以不需要声明。反之需要先写声明语句

return 0

}

关于函数局部变量及全局变量:

简单区分:

定义在函数之外的就是全局变量,这个变量所有函数都可以直接使用,并且共用同一个地址。任意函数修改了变量值,其他函数调用也会变。

定义在函数之内的就是局部变量,局部变量只属于该函数,其他函数即使定义了同样名字的变量,这两个变量也不同地址,互不相干。

比如:

int a//这就是全局变量,作用域下所有函数共用

int main()

{

int b;//这就是局部变量,只在本函数有效,如果想在调用fun函数时让fun也使用该变量,需要把这个变量的地址作为参数传递过去。

printf("%d",b)

return 0;

}

注意:c语言中允许局部变量和全局变量同名,但是同名的局部变量会屏蔽全局变量,实际代码避免同名。

关于函数传值和传址:

如函数void fun(int a,int *b){..........}这里形参a 和*b,分别表示一个值和一个地址

所以在调用该函数时,比如:

int main()

{

int c,d

fun(c,&d)//这里调用就对应上面形参类型,第一个参数传递了c的值(传值),第二个参数传递了d的地址(传址),这里c和&d,叫做实参。当fun函数运行时改变了a和b指向地址的值,对应main函数中c的值不变,d的值改变。

return 0

}

顺带一说:局部变量,在函数运行结束后会自动释放,所以想把局部变量地址作为返回值,需要用malloc函数申请。(这里看不懂可以暂时忽视)