中科大C语言程序设计7.pptVIP

  • 3
  • 0
  • 约1.18万字
  • 约 67页
  • 2016-12-15 发布于江苏
  • 举报
C语言程序设计 - 第7章 指针 * 复杂的声明形式 复杂类型变量的声明容易混淆 指针数组和指向数组的指针 int *a[5]; int (*a)[5]; 指向函数的指针和返回指针值的函数 void (*f)(); void *f(); 过于复杂的声明形式使程序晦涩难懂,而且容易出错 可以用typedef关键字把复杂类型的变量声明用若干个容易理解的小步骤表示 C语言程序设计 - 第7章 指针 * 分析声明形式的方法 从标识符开始,逐层分析其意义 按运算符优先级和结合方向的顺序进行 可能涉及的运算符包括 ()自左向右结合 改变结合顺序;或声明一个函数,向外一层是函数返回值类型声明 []自左向右结合 声明一个数组,向外一层是数组元素类型声明 * 自右向左结合 声明一个指针类型,向外一层是指针基类型声明 C语言程序设计 - 第7章 指针 * 声明形式分析举例 char (*(*x[3])())[5]; x是一个长度为3的数组 数组的元素是指针类型 指针是指向函数的 函数的返回值是指针类型 指向长度为5的字符数组 x is an array[3] of pointer to function returning pointer to array[5] of char C语言程序设计 - 第7章 指针 * void类型指针 定义形式 void *p; 说明 定义一个指针,但不指定它指向的数据类型 不能通过*p引用它指向的数据 void*指针可以与其他任何类型的指针相互赋值和比较,而不需要显式的强制类型转换 经常作为函数形参和返回值的类型 C语言程序设计 - 第7章 指针 * 结束 The End C语言程序设计 - 第7章 指针 * 以数组作为实参的几种方法 (1) 形参用数组名 实参用数组名 形参用指针变量 实参用数组名 f(int x[], int n) { ... ... } main() { int a[10]; ... ... f(a, 10); } f(int *x, int n) { ... ... } main() { int a[10]; ... ... f(a, 10); } C语言程序设计 - 第7章 指针 * 以数组作为实参的几种方法 (2) 形参用数组名 实参用指针变量 形参用指针变量 实参用指针变量 f(int x[], int n) { ... ... } main() { int a[10], *p=a; ... ... f(p, 10); } f(int *x, int n) { ... ... } main() { int a[10], *p=a; ... ... f(p, 10); } C语言程序设计 - 第7章 指针 * 数组用作函数参数举例 选择排序法 C语言程序设计 - 第7章 指针 * 例1:选择排序法 (07-03.C) void sort(int x[], int n) /* int *x */ { int i, j, k, t; for (i=0; in-1; i++) { k = i; for (j=i+1; jn; j++) if(x[j]x[k]) k=j; if (k!=i) t=x[i],x[i]=x[k],x[k]=t; } } C语言程序设计 - 第7章 指针 * 例1:选择排序法 (续) void main() { int a[10], *p, i; p = a; for (i=0; i10; i++) scanf(%d, p++); p = a; sort(p, 10); /* sort(a, 10); */ for (p=a,i=0; i10; i++) printf(%d, *p++); } C语言程序设计 - 第7章 指针 * 指向二维数组的指针 (1) a[0] a[1] a[2] a a+1 a+2 char a[3][4]; *a *(a+1) *(a+2) a是一个长度为3的数组 数组元素是长度为4的数组 a、a+1、a+2都是指针,它们的基类型是长度为4的字符数组,它们与下面定义的指针p同类型 char (*p)[4]; C语言程序设计 - 第7章 指针 * 指向二维数组的指针 (2) a a+1 a+2 a[0] a[1] a[2] 0,0 0,1 0,2 0,3 1,0 1,1 1,2 1,3 2,0 2,1 2,2 2,3 *a a[0] *a+1 a[0]+1

文档评论(0)

1亿VIP精品文档

相关文档