#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*函数*/
/*这是自己定义的库函数*/
int mystrlen(char str[])/*str叫形参*/
{
int len = 0;
while (str[len++]);
len--;
return len;
}
/*无参无返回值的函数*/
void test(void)
{
printf("test\n");
}
/*
函数的形参与实参:
在调用函数的时候,函数大多数都有参数,主调函数和被电泳函数之间需要传递数据。
在定义函数是函数名后面括弧中的变量称为“形式参数”,简称形参。在调用函数是,
函数名后面括号中的变量或表达式称为“实际参数”,简称实参。
1.形参在未出现函数调用时,他们并不占用内存单元。只有在发生函数调用的时候形参才
被分配内存,函数调用完成后,形参所占的内存被释放。
2.实参可以是变量,常量或者表达式。
3.在定义函数时,一定要指定形参的数据类型。
4.在形参与实参的数据类型一定要可兼容。
5.在C语言中,实参与形参的数据传递是“值传递”,即单向传递,只能由实参传递给形参,
而不能由形参传递给实参。
*/
int maxnum (int a, int b)/*有两个整型的形参,形参一定是变量,不能是常量*/
{
int c = (a > b) ? a : b;
return c;//返回值一定要和函数的定义数据类型统一
}
/*函数可以在main前面先声明,在main之后写函数体也是可以的*/
//int mystrlen(char str[]);
//int maxnum (int a, int b);
/*
在函数使用之前就定义这个函数;
先声明这个函数,然后使用,使用代码的后面再定义这个函数;
*/
/*也可以是拥有不同到形参*/
void mytest(char s[], int i)
{
printf("%s,%d\n", s, i);
}
void testcs(int n)
{
n++;
}
/*如果C语言中有一个函数没有明确的的标明函数的返回类型,那么函数的返回类型就是int*/
/*值传递:一般是单向传递*/
mytest1()
{
return 66;
}
void test_str(char s[])
{
s[0] = 'a';
s[1] = 'b';
}
void mystrcat(char s1[], char s2[])
{
int len1 = 0;
while (s1[len1++]);
len1--;
int len2 = 0;
while (s2[len2++]);
len2--;
int i;
for (i = 0; i < len2; i++)
{
s1[len1 + i] = s2[i];
}
}
int main()
{
char str1[100] = "hello";
test_str(str1);
printf("%s\n",str1);//abllo:如果函数的参数是个数组,那么是可以通过形参修改实参的值的
system("pause");
return 0;
int value = 9;
testcs(value);
printf("value = %d\n",value);
system("pause");
return 0;
mytest1();
mytest("AAAAA", 10);//形参实参的类型一定要严格匹配
test();
int a = maxnum(135,56);
printf("a=%d\n", a);
system("pause");
return 0;
char s[] = "hello";
int len = mystrlen(s);//s是实参
printf("%d\n",len);
system("pause");
return 0;
}