把arr1的内容拷贝到arr2
int main()
{
char arr1[] = "bit";
char arr2[] = "########";
strcpy(arr2, arr1);
printf("%s\n",arr2);
return 0;
}
用‘ * '代替arr数组前5个字符
int main()
{
char arr[] = "hello world";
memset(arr, '*', 5);
printf("%s\n", arr);
return 0;
}
真实传给函数的参数,叫实参
形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内 存单元),所以叫形式参数。形式参数当函数调用完成之后就自动销毁了。因此形式参数只在函数中有效。
*pa,*pb是形参,需要在函数内改变实参的值的时候应该用传址调用
void Swap(int *pa,int *pb)
{
int tmp = 0;
tmp = *pa;
*pa = *pb;
*pb = tmp;
}
&a,&b是实参
int main()
{
int a = 10;
int b = 20;
printf("a = %d b = %d\n", a, b);
Swap(&a,&b);
printf("a = %d b = %d\n", a, b);
return 0;
}
注意,如果上面采用传值调用, 不能交换两个变量的值,因为a,b传到x,y时x,y也有自己独立的地址,并没有改变x,y的地址,如:
void Swap(int a, int b)
{
int tmp = 0;
tmp = a;
a = b;
b = tmp;
}
函数的定义是指函数的具体实现,交待函数的功能实现。
调用函数自己本身,例如,接受一个整型值(无符号),按照顺序打印它的每一位。 输入:1234,输出1 2 3 4
执行print时会返回执行上一层没有执行完的print
void print(int n)
{
if (n > 9)
{
print(n/10);
}
printf("%d ", n % 10);
}
int main()
{
unsigned int num = 0;
printf("请输入一个数字:\n");
scanf("%d", &num);
print(num);
return 0;
}
编写函数不允许创建临时变量,求字符串的长度
创建临时变量的写法:
int my_strlen(char *str)
{
int count = 0; //count是临时变量
while (*str != '\0')
{
count++;
str++;
}
return count;
}
int main()
{
char arr[] = "bit";
int len = my_strlen(arr);
printf("%d\n",len);
return 0;
}
不创建临时变量----递归; 递归的方法–把大事化小,首先把字符串首地址传入函数,然后判断字符不是’ \0 '就调用函数本身
my_strlen(“bit”); 1+my_strlen(“it”); 1+1+my_strlen(“t”); 1+1+1+my_strlen(“t”); 1+1+1+0=3;
int my_strlen(char* str)
{
if (*str != '\0')
return 1 + my_strlen(str + 1); //此处str+1是地址,要传到函数去
else
return 0;
}
int main()
{
char arr[] = "bit";
int len = my_strlen(arr);
printf("len = %d\n", len);
return 0;
}
求n的阶乘。(不考虑溢出)
int function(int n)
{
if (n != 0)
return n * function(n - 1);
else
return 1;
}
int main()
{
int n = 0;
printf("请输入一个数:\n");
scanf("%d", &n);
int ret = function(n);
printf("ret = %d\n", ret);
return 0;
}