① c语言的定义函数为什么不加分号
在主程序中每个语句后面都得加分号。
在外面不加分号是因为他只是函数名。跟void main()
不加分号是一个道理
② c语言自定义函数加星号是什么意思
1.
c语言在定义变量时加两个星号是表明这个变量为二级指针
2.
c语言中在定义变量时使用
*
号是为了表明该变量为指针
3.
指针有分一级指针,二级指针,三级指针等,有几个
*
号就相当于是几级指针
③ C语言后定义函数,前面在函数原型中为什么要加*
传递参数为数组或者指针。形参都是以指针形式表示。
你的例,第一个参数的实参为int型,第二个的实参可以是int数组名(第一元素地址)、int型指针(指针的值就是地址)、int值的地址(&x)
int *是一个类型
就好比如char也是一个类型。double也是一个类型。
int类型 int *类型这是两个类型
④ C语言的函数后面到底可不可以加分号
调用函数后面当然要加分号
定义函数后面不用加分号,加上分号也没有任何作用
⑤ c语言函数声明
假设主函数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函数申请。(这里看不懂可以暂时忽视)
⑥ c语言中定义一个函数有什么规则(说的通俗点)
有区别的,函数声明以分号结尾,函数定义后跟函数体
具体形式上可以相同,但声明也可以用省略模式,比如:
int
f(int
a,int
b)
{
return
a+b;
}
其声明可以是:int
f(int
a,int
b);
也可以是:int
f(int,int);
⑦ C语言里,,什么是声明函数,,什么是定义函数
例如:
#include<stdio.h>
int AddOne(int a, int b);
void main()
{
int first;
int second;
int result;
………………
………………
result=AddOne(first,second);
}
int AddOne(int a, int b)
{
return a+b;
}
在上面的代码中,第二行是对函数AddOne的声明,后面必须有分号;而从倒数第四行开始是函数AddOne的定义,后面有大括号括起来。有时候声明和定义是同时进行的,比如写成下面这样:
#include<stdio.h>
int AddOne(int a, int b)
{
return a+b;
}
void main()
{
int first;
int second;
int result;
………………
………………
result=AddOne(first,second);
}