函数
//明确1、是否需要参数参与运算
//明确2、是否需要返回值
//明确3、函数的功能就是单一的,比如如下的功能,就是计算两个数的和
//单向传递 值传递
int Add_Func(int a,int b){
a=50;
b=30;
// printf("%p %p\n",&a,&b);
return a+b;
}
int main(void)
{
int a=90;
int b=80;
int RetValue=0;
RetValue=Add_Func(a,b);
printf("%d %d\n",a,b);
return 0;
}
函数内存图解
指针
一级指针
#include <stdio.h>
//产生野指针的条件
//定义了一个指针但是没有赋初值NULL;
//申请了堆内存,但是没有将指针置为NULL;
//返回一个指向栈空间的指针。
int main(void)
{
int *p=NULL;
int a=0;
a=20;//直接修改变量a
p=&a;
*p=50;//间接修改变量a
printf("a=%d &a=%p p=%p\n",a,&a,p);
return 0;
}
指针与一维数组
数组作为函数参数,会退化为指针,指向数组的第一个元素
#include <stdio.h>
#define N 10
//一维数组作为形式参数的两种形式
//int *p
//int arr[]
//地址的传递,而不是值传递
int Exch_Array(int arr[]){
arr[0]=5;
return 0;
}
int My_Print(int arr[]){
int i=0;
for(i=0;i<N;i++){
printf("%-3d",arr[i]);
}
}
int main(void)
{
int array[N]={1,2,3,4,5};
//int arr[N]={10,20,30,40,50};
int ret=0;
ret=Exch_Array(array);
ret=My_Print(array);
return 0;
}
day04作业:
将螺旋方阵存放到N×N的二维数组中并把它打印输出。要求程序自动生成下图所示螺旋方阵。用#defined定义常量N,要求对N进行更改也能达到相同的效果。
二维矩阵分析如下:
完整Code:
#include <stdio.h>
#define N 5
int main(void)
{
int arr[N][N]={0};
int i=0;//代表的是二维数组的行
int j=0;//代表的是二维数组的列
int n=0;//代表的是有几层数据 N=5的就是3层数据
int num=1;
for(n=0;n<=N/2;n++){
for(i=n;i<N-n-1;i++){
arr[i][n]=num++;// n=0 1 2 3 4
//n=1 17 18
}
for(j=n;j<N-n-1;j++){
arr[i][j]=num++;// n=0 5 6 7 8
}//i=4 j=4
for(i=N-1-n;i>n;i--){
arr[i][j]=num++;//n=0 9 10 11 12
}
for(j=N-1-n;j>n;j--){//n=0 13 14 15 16
arr[i][j]=num++;
}
}
//判断N是否为基数
if(1==N%2){
arr[N/2][N/2]=num;
}
//打印输出二维数组
for(i=0;i<N;i++){
for(j=0;j<N;j++)
printf("%-3d",arr[i][j]);
printf("\n");
}
return 0;
}