指 针 回顾 数组是可以在内存中连续存储多个元素的结构数组中的所有元素必须属于相同的数据类型 数组必须先声明,然后才能使用。声明一个数组只是为该数组留出内存空间,并不会为其赋任何值 数组的元素通过数组下标访问 一维数组可用一个循环动态初始化,而二维数组可用嵌套循环动态初始化 二维数组可以看作是由一维数组的嵌套而构成的 目标 理解指针的概念 定义指针变量 掌握对指针的操作 理解指针和数组的关系 指针简介 2-1 指针简介 2-2 指针也是一个变量,只不过该变量中存储的是另一个对象的内存地址 如果一个变量存储另一个对象的地址,则称该变量指向这个对象 由于指针值是数据,指针变量可以赋值,所以一个指针的指向在程序执行中可以改变。指针p 在执行中某时刻指向变量x,在另一时刻也可以指向变量y 声明并初始化指针变量 与指针相关的运算符2-1 与指针相关的运算符2-2 指针的特点 指针变量的命名规则和其他变量的命名规则一样 指针不能与现有变量同名 指针可存放 C 语言中的任何基本数据类型、数组和其他所有高级数据结构的地址 若指针已声明为指向某种类型数据的地址,则它不能用于存储其他类型数据的地址 应为指针指定一个地址后,才能在语句中使用指针 指针使用示例1 指针使用示例2 指针赋值运算 指针算术运算2-1 指针算术运算 2-2 指针关系运算 指向数组的指针 一个数组存储在一块连续内存单元中;数组名就是这块连续内存单元的首地址; 第 (i + 1) 个数组元素的地址可表示为 &data[i] 或 (data+i)。 可以通过以下方式为指向数组的指针赋值: int a[10]; pa=&a[0]; // 或者 pa=a; 一个指针变量可以指向一个数组元素 int *ptr,data[10]; ptr=data+3;//或者ptr=&data[3] 指向数组的指针示例1 指向数组的指针示例2 总结2-1 指针是一个变量,它存储另一个对象的内存地址 指针的声明由基本类型、星号 (*) 和变量名组成 为指针赋值,赋值运算符右侧必须是一个地址。如果是普通变量需要在前面加一个取地址运算符 &;如果是另一个指针变量或者是一个数组,不需要加 &运算符 运算符 * 用于返回指针指向的内存地址中存储的值 总结2-2 指针的算术运算的含义是指针的移动,将指针执行加上或者减去一个整数值n的运算相当于指针向前或向后移动n个数据单元 指针可以执行比较相等的运算,用来判断两个指针是否指向同一个变量 指向数组的指针,存储的是数组中元素的地址。数组data的第 (i + 1) 个元素的地址可表示为 &data[i] 或 (data+i) 内存 10 int x ED53 地址 变量 数据 ED53 int ptr_x 指针 指针 ptr_x 指向变量 x 数据类型 *指针名; int *ptrnum; char *ptralpha; float *rate_ptr; double *p, *q; 值为NULL的指针称为空指针,这意味着,指针并不指向任何地址。 在头文件 stdio.h 中,NULL 定义为常量。 ptrnum = NULL; int num, *ptrnum; ptrnum = # 内存 100 num FF7C ptrnum 指针 FF7C int num, *ptrnum; ptrnum = # *ptrnum=15; 内存 100 num FF7C ptrnum 指针 FF7C 15 #include void main() { int var = 10; int *ptr_var; ptr_var = &var; printf(" var 的值是: %d", var); printf("\n var 的内存地址是: %x", &var); printf("\n 指针 ptr_var 的地址是: %x\n", &ptr_var); printf("\n var 的值是: %d", *ptr_var); printf("\n var 的地址是: %x\n", ptr_var); } 内存 var ptr_var 10 12ff7c var的值是:10 var 的内存地址是:12ff7c 12ff7c 12ff78 指针ptr_var的地址是:12ff78 var的值是:10 var的地址是:12ff7c void main() { int num1 = 50, num2 = 100; int *ptr1, *ptr2; ptr1 = &num1; printf(" num1 的值是: %d", *ptr1); printf("\n num1 的地址是: %x \n", ptr1); ptr2 = &num2; printf("\n num2 的值是: %d", *ptr2); printf("\n num2 的地址是: %x \n", ptr2); *ptr2 = *ptr1; printf("\n 重新赋值后 num2 的值是: %d", *ptr2); printf("\n 重新赋值后 num2 的地址是: %x\n", ptr2); } 内存 num1 ptr1 50 12ff7c 12ff7c num2 ptr2 100 12ff78 12ff78 50 int x,*ptr_x,*ptr_y; ptr_x=&x; ptr_y = ptr_x; 100 x FF7C ptr_x ptr_y FF7C FF7C int a[5],*pa; pa=a; a[0] a[1] a[2] a[3] a[4] 23 43 11 50 46 pa FE60 FE64 FE68 FE6C FE70 FE60 int *ptrnum,arr_num[8]; ptrnum = &arr_num[0]; ptrnum++; 使用递增/递减运算符(++ 和 --)将指针递增或递减 内存 arr_num[0] arr_num[1] arr_num[2] arr_num[3] arr_num[4] arr_num[5] arr_num[6] arr_num[7] 10 23 15 60 41 49 13 39 一个类型为 T 的指针的移动, 以 sizeof(T)为移动单位。 将指针加上或者减去某个整数值 ptrnum = &arr_num[0]; ptrnum = ptrnum + 4; printf(“%d”,*ptrnum); ptrnum = &arr_num[5]; ptrnum = ptrnum - 2 ; printf(“%d”,*ptrnum); 41 60 内存 arr_num[0] arr_num[1] arr_num[2] arr_num[3] arr_num[4] arr_num[5] arr_num[6] arr_num[7] 10 23 15 60 41 49 13 39 比较两个指针
指针.ppt
下载此电子书资料需要扣除0点,