k 第十章 指针.ppt
文本预览下载声明
第10章 指针 指针是C语言中的一个重要概念使用它的优点: 表示复杂的数据结构; 动态分配内存; 方便使用字符串; 方便地使用数组; 调用函数时能得到多于一个的值; 直接处理内存地址。 10.1地址和指针的概念 内存区的每一个字节有一个编号,这就是“地址”; 内存单元的地址和内存单元的内容: int i,j,k; 编译后已经将变量名转换为变量的地址。 对变量的存取是通过地址进行的。 例 printf(“%d”,i) 执行过程: 定义一种特殊的变量,存放地址 存放地址方法:i_pointer=i; i_pointer=2000 一个变量的地址称为变量的指针。 指针变量:存放变量地址的变量是指针变量 10.2.1 定义一个指针变量 指针变量:存放变量地址的变量,是指针类型 int i, j; int *pointer_1,*pointer_2; 定义指针变量的一般形式: 10.2.2 指针变量的引用 注意:指针变量只能存放地址 int i=100; pointer_1=i; × 有关的运算符 (1):取地址运算符 (2)*:指针运算符 怎样使一个指针变量指向另一个变量? 例 10.1 通过指针变量访问整形变量。 main() { int a,b; int *pointer_1,*pointer_2; a=100;b=10; pointer_1=a; pointer_2=b; printf(“%d,%d\n”,a,b); printf(“%d,%d\n”,*pointer_1,*pointer_2); } 对“ ”和“*”进一步说明: pointer_1= a; pointer_2= b; (1) *pointer_1 a 自右向左结合 pointer_2=*pointer_1: pointer_2=a; (2) *a的含义是什么? (3)(*pointer_1)++ ? 10.2.3指针变量作为函数参数 指针变量作为函数参数:将一个变量的地址传送到另一个函数中; swap(int *p1,int *p2) {int temp; temp=*p1; *p1=*p2; *p2=temp; } swap(int *p1,int *p2) {int *temp; temp=p1; p1=p2; p2=temp; } main() { int a,b; int * pointer_1,*pointer_2; scanf(“%d,%d”,a,b); pointer_1=a;pointer_2=b; if(ab) swap(pointer_1,pointer_2); printf(“\n%d,%d\n”, *pointer_1,*pointer_2); } 例 10.4 输入a、b、c3个整数,按大小顺序输出。 swap( int *pt1, int *pt2) {int temp; temp=*pt1; *pt1= *pt2; *pt2=temp; } ? exchange(int *q1, int *q2, int *q3) {if( *q1 *q2) swap(q1,q2); if( *q1 *q3) swap(q1,q3); if( *q2 *q3) swap(q2,q3); } ? 10.3 数组与指针 数组的指针:数组的起始地址; 数组元素的指针:数组元素的地址; 引用数组元素:指针法、下标法; 数组名代表数组的起始地址; p=a; p=a[0]; 10.3.2 通过指针引用数组元素 *p=1:表示对p当前所指向的数组元素赋予一个值。 C规定:指针变量p已指向数组中的一个元素,则p+1指向统一数组中的下一个元素。 (1)p+i和a+i ? (2) *(p+i)或*(a+i): p+i或a+i所指向的元素即a[i]; 编译时,将a[i]译成*(a+i),指针偏移; (3) 指向数组的指针变量可以带下标;如p[i]与*(p+i)等价; 例 10.5 输出数组中的全部元素。 假设有一个a数组,整型,有10个元素。要输出各元素的值有三种方法: (3)用指针变量指向数组 元素 main() { int a[10]; int *p, i; for(i=0;i10;i++) scanf(“%d”,a[i]); printf(“\n”); for(p=a;p(a+10);p++) printf(“%d”,*p); } 注意问题: (1)指针变量可以实现本身值的改变 如:p++; 例10.6 通过指针变量输出a数组的10个元素 main() { int *p,i,a[10]; p=a;
显示全部