递归函数思想
fibonacci函数的递归思想
-------------------------------------------------------------------------------------------------------------------
递归函数例题
阶乘的递归
数组的性质
二维数组的性质
#include <stdio.h>
/*
数组中:
1.取地址符:&
2.取值符号:*(指针法)
3.取值符号:[](下标法)
int arr[3] ={1,2,3};
arr[0] = 1 ---> *arr
arr[1] = 2 ---> *(arr+1)
arr[2] = 3 ---> *(arr + 2)
*/
/*
一维数组的数组名含义:首元素的地址 (地址操作空间为一个元素)
二维数组的数组名含义:首行元素的地址(地址操作空间为一行)
*/
int main(void)
{
int arr[3][4] = { 10,20,30,40,50,60,70,80,90,100,110,120 };
printf("arr[0][0] =%d\n",arr[0][0]); //第0行第0列元素的值
printf("arr = %p\n",arr); //首行元素的行地址
printf("*arr = %p\n",*arr); //第一行第一列元素的地址
printf("arr[1] =%p\n",arr[1]); //*(arr+1) //第二行第一个元素的地址
printf("&arr = %p\n",&arr); //&arr表示的是整个二维数组的地址
printf("------------------------------------------\n");
printf("arr[0][0]+1 =%d\n", arr[0][0]+1); //第0行第0列元素的值
printf("arr+1 = %p\n", arr+1); //首行元素的行地址
printf("*arr+1 = %p\n", *arr+1); //第一行第一列元素的地址
printf("arr[1]+1 =%p\n", arr[1]+1); //*(arr+1) //第二行第一个元素的地址
printf("&arr+1 = %p\n", &arr+1); //&arr表示的是整个二维数组的地址
/*
二维数组的遍历:
*/
#if 0
int count = 0;
for (int i = 0; i < 12; i++)
{
count++;
if (count == 5)
{
putchar(10);
count = 1;
}
printf("%-5d", *(*arr+i)); //指针法
}
#endif
for(int i = 0 ; i < sizeof(arr)/sizeof(arr[0]); i++)
{
for (int j = 0; j < 4; j++)
{
//printf("%-5d",arr[i][j]); //下标法
printf("%-5d", *(*(arr + i)+j)); //指针法
}
putchar(10);
}
return 0;
}
二维数组的基本使用
#include <stdio.h>
/*
二维数组:
存储类型 数据类型 数组名[行数][列数];
例如:
int arr[3][4];
定义一个名为arr的3行4列的二维数组,一共12个元素,每个元素是int类型
*/
int main(void)
{
/*
二维数组的初始化:
*/
//全部初始化
//int arr[3][4] = { 10,20,30,40,50,60,70,80,90,100,110,120 };
//int arr[3][4] = { { 10,20,30,40},{50,60,70,80},{90,100,110,120} };
//局部初始化,按列存储,未初始化的部分,全部写成0
//int arr[3][4] = { 10,20,30,40,50,60,70,80 };
//int arr[3][4] = { { 1,2,3},{5,6,7},{9,10,11} };
//下列二维数组中:{}表示行,[]中表示列数
//int arr[3][4] = { {[1] = 1,[2] =2,[3] =3},{ [0] = 5,[1] = 6,[3] = 7},{ [0] = 8,[1] = 9,[2] = 10}};
//int arr[3][4] = { [0] [0] = 1,[1][1] = 2,[2][2] = 3 };
//按列存储,行号可以缺省
int arr[][4] = { 1,2,3,4,5,6,7,8,9,0,1,2,3,1,2,3,4,5,6,7,8,9,0,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0 };
//int arr[3][] = { 10,20,30,40,50,60,70,80,90 };(错误,列数不能省)
printf("sizeof(arr) = %lld\n",sizeof(int[3][4]));
int row = sizeof(arr) / sizeof(arr[0]); //整个二维数组的大小/一行的大小 = 行数
/*
二维数组的遍历:
*/
#if 1
for (int i = 0; i < row; i++)
{
for (int j = 0; j < 4; j++)
{
printf("%-5d",arr[i][j]);
}
putchar(10);
}
#endif
/*
for (int i = 0; i < 12; i++)
{
printf("%-5d",arr);
}
*/
return 0;
}