第11章 指针与数组--第一讲
- 格式:pdf
- 大小:2.14 MB
- 文档页数:25
※ 数组元素a[i]的地址可表示为a+i, 即:a+i 就是 &a[i] ※ 数组元素a[i]可用*(a+i)表示
a
&a[0]
知识好象砂石下面的泉水,越掘得深泉水越清
第11章 指针和数组
一维数组的地址示例
#include <stdio.h>
int main()
第11章 指针和数组
学习目标
掌握向函数传递一维数组 掌握如何使用指针访问一维数组元素 掌握指针变量作函数参数的用法—传递整个数组
学会向函数传递二维数组
了解指针与二维数组间的关系
学会使用动态数组
掌握字符指针的用法
知识好象砂石下面的泉水,越掘得深泉水越清
第11章 指针和数组
引例
知识好象砂石下面的泉水,越掘得深泉水越清
形参:数组
知识好象砂石下面的泉水,越掘得深泉水越清
第11章 指针和数组
向函数传递一维数组
n)
int x[N] x[ ] , int double Average( int 数组名作函数参数 { int i ; 1、实参数组与形参数组 int ave = 0; 若指针获取了数组的首地址, for ( i = 0; i < n ; i++ ) 的类型必须一致 如何通过指针访问数组中 ave += x[i]; 的每个元素呢? 2、用数组作参数时,形 return ave / n ; 参必须是定义方式,实 } int main() 参必须是数组名 3、形参数组可不指定大 { int score[N], i; … ave= Average(score , n) ; 小
知识好象砂石下面的泉水,越掘得深泉水越清
第11章 指针和数组
指针关系运算
#include<stdio.h> int main () { int *ptrnum1, *ptrnum2; int value = 1; ptrnum1 = &value; value += 10; ptrnum2 = &value; if (ptrnum1 = = ptrnum2) printf("\n 两个指针指向同一个地址\n"); else printf("\n 两个指针指向不同的地址\n"); return 0; }
int *ptr, a[8]; ptr = &a[0]; ptr++; 一个类型为 T 的指针的移动, 以 sizeof(T)为移动单位。
49 13 39
知识好象砂石下面的泉水,越掘得深泉水越清
第11章 指针和数组
指向一维数组的指针
方法4: for ( pa=a, i=0; i<10; i++ ) printf( "%d", pa[i] ); 方法5: for ( pa=a; pa<a+10; pa++ ) printf( "%d", *pa );
&a[i] a+i pa+i &pa[i]
知识好象砂石下面的泉水,越掘得深泉水越清
第11章 指针和数组
指向一维数组元素的指针
内存
移动指针的方法,即使用递增/递减运算符(++ 和 --)将 指针递增或递减 ,顺序访问数组中的每个元素
10 23 15 60 41
a[0]
a[1] a[2] a[3] a[4] a[5] a[6] a[7]
知识好象砂石下面的泉水,越掘得深泉水越清
实参:数组 修改如上
知识好象砂石下面的泉水,越掘得深泉水越清
第11章 指针和数组
指针与一维数组
#include <stdio.h> double Average ( int x[ ] , int n ) #define N 40 { int main( ) double ave=0; { int score[N], i = -1, n;,*q; double ave = 0; int i; do for( i=0; i<n; i++ ) { i++; { scanf( "%d", &score[i] ); ave += x[i] ; }while( score[i] >= 0 ); } n = i;
FE60 23 43 11 50 46
a[0] a[1] a[2] a[3] a[4]
pa
FE60
FE64 FE68 FE6C FE70
知识好象砂石下面的泉水,越掘得深泉水越清
第11章 指针和数组
指向一维数组元素的指针
若指针pa和数组a的类型相同,且pa = a,则
a[i] *(a+i) *(pa+i) pa[i]
第11章 指针和数组
主调函数
int main() { int a, b; a = 5; b = 9; Swap(a, b); printf("a=%d,b=%d",a,b); return 0; } a
回顾
被调函数
void Swap(int x, int y) { int temp; temp = x; x = y; y = temp; }
回顾
被调函数
void Swap(int *x, int *y) { int temp; temp = *x; *x = *y; *y = temp; }
temp
5
x y
&b 形 参
y
a 5 9 *x
实 参
b 5 9 *y
x &a
&b
&a
知识好象砂石下面的泉水,越掘得深泉水越清
第11章 指针和数组
主讲:付文霞
q = score;
ave = Average( score, n ); } q printf ( "Average is %.2f\n", ave ) ; return 0; }
return ave / n;
形参:数组 实参:指针 修改如上
知识好象砂石下面的泉水,越掘得深泉水越清
第11章 指针和数组
计算机与通信工程学院
知识好象砂石下面的泉水,越掘得深泉水越清
第11章 指针和数组
C数据类型
为什么要 学C语言
简单的算术运 算符和表达式 键盘输入和屏 幕输出
选择控制 结构
函数 数组
指针和 数组 结构体
文件 操作
循环控制 结构
指针
字符串
简单的数据结构
复杂的数据结构
知识好象砂石下面的泉水,越掘得深泉水越清
输出数组 a 的十个元素 方法1: for ( i=0; i<10; i++) printf( "%d", a[i] );
方法2: for ( i=0; i<10; i ++ ) printf( "%d", *(a+i) );
下列程序段 有无问题? for ( i=0; i<10; i ++ ) 方法3: { printf( "%d", *a ); for ( pa=a, i=0; i<10; i ++ ) ++a; printf( "%d", *(pa+i) ); }
第11章 指针和数组
向函数传递一维数组
#include <stdio.h> double Average (( 获取数组首地址 int x[ ] , int n ) #define N 40 { int main( ) double ave=0; { int score[N], i = -1, n; int i; double ave = 0; for( i=0; i<n; i++ ) do { { i++; ave += x[i] ; scanf( "%d", &score[i] ); } }while( score[i] >= 0 ); return ave / n; n = i; } ave = Average( 传数组首地址 score , n ); printf ( "Average is %.2f\n", ave ) ; return 0; 实参:数组 }
FE60 23 43 11 50 46
a[0]
pa
FE64
FE64 FE68 FE6C FE70
a[1]
a[2] a[3] a[4]
知识好象砂石下面的泉水,越掘得深泉水越清
第11章 指针和数组
指向一维数组元素的指针
若有int a[5], *pa,且指针pa指向数组a的第一个 元素时,即 pa = a = &a[0],如何令指针pa访问 到数组中的其他元素a[i] 方法是 pa+i 指向 a[i],*(pa+i) a[i] pa[i]
tempb5Fra bibliotekx y 9 5
y
实 参
a 5
b 9
x 9 5
形 参
知识好象砂石下面的泉水,越掘得深泉水越清
第11章 指针和数组
主调函数
int main() { int a, b; 共享内存 a = 5; b = 9; Swap( &a, &b ); printf("a=%d,b=%d",a,b); return 0; a b }