鹏哥c语言视频
P46 函数递归
代码如下:
//输出1234输出1 2 3 4 (用递归)
#include<stdio.h>
#include<windows.h>
void digui(int a)
{
int n=a;
if (n > 9)
{
digui(n / 10);
}
printf("%d ", n % 10);
}
int main()
{
int a;
printf("请输入要拆分的数字\n");
scanf_s("%d", &a);
digui(a);
system("pause");
}
结果如下:
当递归没有写终止条件时会出现栈溢出的情况。
要了解到内存分为三大块:
栈区,堆区,静态区。
栈区
{放局部变量,函数形参,函数返回值(也可以放在寄存器)函数调用……都会在栈上申请空间。当函数调用(递归)太多时候也会出现栈溢出情况。
}
其他的目前尚未了解太多,可知程序员写代码时会有将部分代码放进静态区中以减少发生栈溢出的可能。
P57 数组与数组名
1.冒泡排序:
//冒泡排序
#include<stdio.h>
#include<windows.h>
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,0 },i,j,sz;
sz = sizeof(arr) / sizeof(arr[0]);
for (i = 0; i< sz; i++)
{
for (j = 0; j <sz-i; j++)
{
if (arr[j] < arr[j - 1])
{
int a = 0;
a = arr[j-1];
arr[j-1] = arr[j];
arr[j] = a;
}
}
}
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
system("pause");
}
递归的两个必要条件
1.存在限制条件。
2.递归后越来越接近限制条件。
递归的好习惯:不要改变传值本身。
例如:return(str+1)的好处>return(++str)
二维数组:
1.在函数传参方面与一维数组一致都是"arr"
2.在函数调用时一维数组可以在写成一维指针,但是二维数组不行。它要写成指向一维数组的指针
"int(*arr[x])"
3.arr表示数组的首元素地址,主函数中sizeof(arr)表示数组长度而不是类型长度。
关于main函数
在c语言中main函数也是被一个函数调用的(_tmain CRTStart up())但这个函数也被另一个函数调用着(mainCRTStart up())