1、和正常的函数声明方法一样。
创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都做网站、成都网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的霞山网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
C语言的函数定义格式是:
函数返回值类型 函数名 ( 参数列表 )
{
//函数体
}
在使用函数时,要先做声明,格式如下:
函数类型 函数名称 ( 参数列表 );
特别地,在函数声明中的参数列表中,不需给出具体的变量名称,但要给出每个变量的类型。
2、void swap( p1, p2)
int *p1,*p2;
这种写法是KR C的声明格式,现在的编译器普遍遵循ANSI C(或者ISO C)标准,所以现在的C语言程序已经不再使用这种声明格式了,而是使用如下形式:
void swap(int *p1,int *p2)
确实很急,函数声明 中的函数名都打错了~~返回值也没打。
函数传递是值传递,传递指针的值 能改变 调用函数的值是因为 他们的地址是 一样的。而实质上也是值传递,进来的是指针指向的地址。
而你mop函数交换的是 指针 也就是 地址 值 当然不影响调用函数。
主函数中
p=m;m=n;n=p;
交换是因为这几个指针一直在作用域中,没有释放。交换了指针中存放的地址,就是指向的内存地址的改变。运行下下面二的程序 能帮你理解。
#includestdio.h
int main()
{
int a=604,b=750,c;
int *m,*n,*p;
m=a;
n=b;
printf("指针没有交换前的地址m n %d %d\n",m,n);
p=m;m=n;n=p;
printf("指针交换后的地址m n %d %d\n",m,n);
printf("%d%d\n",*m,*n);
printf("值没有交换前的地址m n %d %d\n",m,n);
c=*m;*m=*n;*n=c;
printf("值交换后的地址m n %d %d\n",m,n);
printf("%d%d\n",*m,*n);
return 0;
}
===========================
#includestdio.h
int main()
{
void nop(int *x,int *y);
void mop(int *x,int *y);
int a=604,b=750;
int *m,*n;
m=a;
n=b;
printf("主函数中指针交换前的地址\tm n %d %d\n",m,n);
mop(m,n);
printf("主函数中指针交换后的地址\tm n %d %d\n",m,n);
printf("%d%d\n",*m,*n);
nop(m,n);
printf("%d%d\n",*m,*n);
return 0;
}
void mop(int *x,int *y)
{
printf("指针没有交换前的地址\t\tm n %d %d\n",x,y);
int *z;
{z=x;x=y;y=z;}
printf("指针交换后的地址\t\tm n %d %d\n",x,y);
}
void nop(int *x,int *y)
{int a;
a=*x;*x=*y;*y=a;
}
选D
因为第一个参数是地址传递,fun(b,a);中传入a字符。*c=*c+1将c的值变为b字符。主函数的值改变。
第二个参数是值传递,所以在函数中d的值为B字符。但是并不影响主函数的值,所以主函数输出a的值是A。b的值是b。
#includestring.h // 导入头文件string.h
#includestdio.h // 导入头文件stdio.h
char *fun(char *t) // 定义函数, 名称fun, 输入参数为char *, 返回值为char *
{
char *p = t; // 把t的值赋值给p, 相当于p指向与t相同的字符串
return p + strlen(t) / 2; // strlen返回值为字符串长度, 然后p位移其一半(向下取整)的距离并返回值
}
int main(int argc, char *argv[])
{
char *str = "abcdefgh"; // str指向字符串“abcdefgh”
str = fun(str); // str调用fun函数, 参数为str, 并将返回值赋值给str
puts(str); // 此时str指向e, 输出为“efgh\n”
return 0;
}