目录
一、函数
二、数组
一、函数
交换两个数:




发现这样并没有交换a和b的值,只是交换了x和y的值,这是因为:
        //当实参传递给形参的时候,形参是实参的一份临时拷贝
         //对形参的修改不能改变实参
实参与形参是什么?
实参:真是传递给函数的参数,在进行函数调用时,必须有确切的值;形参:指的是函数名括号中的变量,因为形参只在函数调用的时候才实例化(分配内存单元)。形参在函数调用完成之后就自动销毁(局部变量),因此形参只在函数中才有效。形参实例化之后相当于实参的一份临时拷贝。
那如何交换a和b?


交换方法:
//形参 - 形式参数
//当实参传递给形参的时候,形参是实参的一份临时拷贝
//对形参的修改不能改变实参
void Swap(int* x, int* y)
{
	int z = 0;
	z = *x;
	*x = *y;
	*y = z;
}
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d%d", &a, &b);
	printf("交换前:a = %d b = %d\n", a, b);
	Swap(&a, &b);//实参
	printf("交换后:a = %d b = %d\n", a, b);
	return 0;
}



注意:int*接收int,int**接收int*

但是为什么下面这种不用传地址?见调试图:


printf函数:
int main()
{
	printf("%d\n", 43);//43
	printf("%d", printf("%d", printf("%d", 43)));
	/*当执行最外层的printf的时候,其打印内容是printf("%d",43)的返回值,
	而在最外层printf函数得到printf("%d",43)的返回值之前,会先执行printf("%d",43)
	也就是会先打印 43
	43共2个字符,所以printf("%d",43)返回整型2*/
	//printf函数返回值返回的是打印的字符的个数
	return 0;
}
函数递归:


二、数组
通过赋初值的方式给一维字符数组赋字符串
 1、用给一般数组赋初值的相同方式给一维字符组赋初值
         char str[10]={‘s’,‘t’,‘r’,‘i’,‘i’,‘n’,‘j’,’\0’}
         字符数组str共有10个元素,但str作为字符串,其长度为7,虽然最后一个字符是‘\0’,但它并不是结束标识因为系统会自动的给其分配一个结束标识。
 2、在赋值时直接赋字符串常量
         char str[10]={“string”};
         习惯上省略花括号
         char str[10]=“string!”(这种方式会自动给字符串的末尾添加结束标识,但需要注意的是字符串数组的长度一定要比赋值的长度多一个)
用一维字符数组存放字符串-CSDN博客 https://blog.csdn.net/m0_46170663/article/details/104295429
https://blog.csdn.net/m0_46170663/article/details/104295429
 
 
数组名表示首元素的地址,但是有两个例外:
1.sizeof(数组名),这个数组名表示整个数组
2.&数组名,这个数组名也表示整个数组,取出的是整个数组的地址

 



















![[机缘参悟-119] :一个IT人的反思:反者道之动;弱者,道之用 VS 恒者恒强,弱者恒弱的马太效应](https://img-blog.csdnimg.cn/106b29c1c1e6410782a24cdc464f812d.png)
