目录

  • 1 第一章 C语言简介
    • 1.1 C语言前世今生
    • 1.2 主流开发环境介绍
    • 1.3 第一个小程序解析
    • 1.4 常见编译错误
    • 1.5 章节知识点小结
  • 2 算法基础
    • 2.1 算法-程序的灵魂
    • 2.2 算法的描述-流程图
  • 3 数据类型与运算符
    • 3.1 数据描述
    • 3.2 运算符和表达式1
    • 3.3 运算符和表达式2
    • 3.4 章节知识点小结
  • 4 顺序结构程序设计
    • 4.1 输入和输出
    • 4.2 顺序结构程序设计
    • 4.3 章节知识点小结
  • 5 选择结构程序设计
    • 5.1 关系运算符和关系表达式
    • 5.2 逻辑运算符和逻辑表达式
    • 5.3 if语句
    • 5.4 条件运算符
    • 5.5 switch语句
    • 5.6 章节知识点小结
  • 6 循环结构程序设计
    • 6.1 while循环结构
    • 6.2 do_while循环结构
    • 6.3 for循环结构
    • 6.4 循环的嵌套
    • 6.5 break语句和continue语句
    • 6.6 章节知识点小结
  • 7 数组
    • 7.1 一维数组
    • 7.2 二维数组
    • 7.3 字符数组
    • 7.4 章节知识点小结
  • 8 函数
    • 8.1 子程序设计
    • 8.2 函数定义
    • 8.3 函数的调用
    • 8.4 局部变量和全局变量
    • 8.5 参数传递
    • 8.6 函数递归调用
    • 8.7 章节知识点小结
  • 9 指针
    • 9.1 指针的基本概念
    • 9.2 指针变量的定义及引用
    • 9.3 通过指针引用数组元素
    • 9.4 指向多维数组的指针和指针变量
    • 9.5 用指向数组的指针作函数参数
    • 9.6 指针与字符串
    • 9.7 函数指针和指针函数
    • 9.8 章节知识点小结
  • 10 用户自己建立数据类型
    • 10.1 定义和使用结构体变量
    • 10.2 使用结构体数组
    • 10.3 结构体指针
    • 10.4 章节知识点小结
  • 11 编译预处理
    • 11.1 宏定义预处理
    • 11.2 文件包含预处理
    • 11.3 条件编译预处理
    • 11.4 章节知识点小结
  • 12 文件
    • 12.1 文件的基本知识
    • 12.2 文件的基本操作
    • 12.3 章节知识点小结
用指向数组的指针作函数参数

用数组名作函数参数时,数组名代表该数组首元素的地址,形参应该是一个指针变量。C编译都是将形参数组名作为指针变量来处理的。

int main()                   

{ void fun(int arr[],int n]; 

   int array[10];  

   ……

   fun (array,10);                      

   return 0;

void fun(int arr[ ],int n)  //    相当于:void fun(int *arr,int n)

{ …… }

例:将数组a中n个整数按相反顺序存放。

参考代码:

#include <stdio.h>

int main()

{ void inv(int x[ ],int n); 

   int i, a[10]={3,7,9,11,0,6,7,5,4,2};

   for(i=0;i<10;i++) printf(“%d ”,a[i]); 

   printf("\n");

   inv(a,10); 

   for(i=0;i<10;i++) printf(“%d ”,a[i]); 

   printf("\n");

   return 0;

}

void inv(int x[ ],int n)


{ int temp,*i,*j;


   i=x;  j=x+n-1;


   for(   ; i<j; i++,j--)


   { temp=*i; *i=*j; *j=temp; }


}


一维数组名可以作为函数参数,多维数组名也可作函数参数。

用指针变量作形参,以接受实参数组名传递来的地址。

可以有两种方法:

①用指向变量的指针变量

②用指向一维数组的指针变量

例:有一个班,3个学生,各学4门课,计算总平均分数以及第n个学生的成绩。 

解题思路:

(1)函数average求总平均成绩,用指向数组元素的指针作参数(列指针)。

(2)函数search找出并输出第i个学生的成绩,用指向一维数组的指针变量作参数(行指针)。

参考代码:

#include <stdio.h>

int main()

{ void average(float *p,int n);

   void search(float (*p)[4],int n);

   float score[3][4]={{65,67,70,60},

           {80,87,90,81},{90,99,100,98}};

   average(*score,12); 

   search(score,2); 

   return 0;

}

void average(float *p,int n) 

{ float *p_end;

   float sum=0,aver;

   p_end=p+n-1; 

   for(   ;p<=p_end; p++)

        sum=sum+(*p);

   aver=sum/n;

   printf("average=%5.2f\n",aver);

}

void search(float (*p)[4],int n) 

{ int i;

   printf("The score of No.%d are:\n",n);

   for(i=0;i<4;i++)

       printf("%5.2f ",*(*(p+n)+i));    

   printf("\n");

}