一、魔方阵(奇数阵)
void MagicSqaure(int (*arr)[ROW])
{
assert(ROW % 2 != 0);
arr[0][ROW/2] = 1;//将1放在第0行的中间位置
int preRow = 0;//行下标
int preCol = ROW/2;//列下标
for(int i = 2;i <= ROW*ROW;i++)
{
if( arr[(preRow-1+ROW) %ROW] [(preCol+1)%ROW] != 0 )//如果当前位置的上一行,下一列有无元素。
{
preRow = (preRow+1) % ROW ;//如果有元素就把当前的i放在上一个i的位置的下一行
}
else
{
preRow = (preRow-1+ROW) %ROW;//如果没有元素就把当前的i放在上一个i的位置上一行下一列
preCol = (preCol+1)%ROW;
}
arr[preRow][preCol] = i;
}
}
二、杨辉三角
void Fun(int (*arr)[ROW])
{
for(int i = 0;i < ROW;i++)
{
for(int j = 0;j <= i;j++)
{
if(i == j || j == 0)
{
arr[i][j] = 1;//将对角线和第一列的元素赋值为1
}
else
{
arr[i][j] = arr[i-1][j-1] + arr[i-1][j];//其余位置的元素等于该元素的上上一行减一列的元素加上上一行同一列的元素
}
}
}
}
三、全局变量、静态全局变量、局部变量、静态局部变量
(1)定义
全局变量:定义在函数体外的变量
静态全局变量:加了static的全局变量
局部变量:定义在函数体内部的变量
静态局部变量:加了static的局部变量
(2)extern:引入外部变量的符号
extern “C” :引入外部C语言代码
使用extern关键字来声明变量为外部变量。具体说就是在其中一个c文件中定义一个全局变量key,然后在另一个要使用key这个变量的c文件中使用extern关键字声明一次,说明这个变量为外部变量,是在其他的c文件中定义的全局变量。请注意我这里的用词:定义和声明。例如在main.c文件中定义变量key,在common.c文件中声明key变量为外部变量,这样这两个文件中就能共享这个变量key了。(common.文件中要包含main.c的全部头文件)
extern int arr[5];//正确引用
extern int *arr;//extern去引入外部全局数组的时候,需要注意的
(3)测试全局变量作用域的代码
int data1 = 10;
void Fun1()
{
data1++;
printf("%d\n",data1);
}
int main()
{
for(int i = 0;i < 10;i++)
{
Fun1();
}
return 0;
}
(4)测试局部变量的作用域
void Fun2()
{
int data2 = 10;
data2++;
printf("%d\n",data2);
}
int main()
{
for(int i = 0;i < 10;i++)
{
Fun2();
}
return 0;
}
(5)测试静态全局变量的作用域
static int data3 = 10;
void Fun3()
{
data3++;
printf("%d\n",data3);
}
int main()
{
for(int i = 0;i < 10;i++)
{
Fun3();
}
return 0;
}
(6)测试静态局部变量的作用域
void Fun4()
{
static int data4 = 10;
data4++;
printf("%d\n",data4);
}
int main()
{
for(int i=0;i<10;i++)
{
Fun4();
}
return 0;
}