《移动通信软件编程基础—C语言第12章指针的高级使用》由会员分享,可在线阅读,更多相关《移动通信软件编程基础—C语言第12章指针的高级使用(31页珍藏版)》请在金锄头文库上搜索。
1、 移动通信软件编程基础 C语言IC-MSP知识回顾结构体结构体 结构变量中的成员类型可以各不相同结构变量中的成员类型可以各不相同 必须先定义结构类型,再使用该类型定义变量必须先定义结构类型,再使用该类型定义变量 访问结构变量的成员:结构变量名访问结构变量的成员:结构变量名. .成员名成员名 如有指针如有指针p指向结构体变量指向结构体变量stu,则,则:stu.number 等价于等价于 p-number 等价于等价于 (*p)-number 结构数组的每个元素的类型为结构类型结构数组的每个元素的类型为结构类型 结构变量做函数参数时是值传递结构变量做函数参数时是值传递 IC-MSP12指针的高级
2、使用 第章IC-MSP本章目标理解函数两种参数传递方式:传值、引用理解函数两种参数传递方式:传值、引用 理解指针和数组的关系理解指针和数组的关系 理解数组作为函数参数理解数组作为函数参数理解结构体指针作为函数参数理解结构体指针作为函数参数 IC-MSP数组的特性(回顾) v二维数组可以看作一维数组的嵌套二维数组可以看作一维数组的嵌套v数组存储在一块连续内存单元中数组存储在一块连续内存单元中v声明数组时会为该数组分配内存空间,但并不会初始化声明数组时会为该数组分配内存空间,但并不会初始化v使用数组下标访问数组元素使用数组下标访问数组元素 ,对单个数组元素进行处理,对单个数组元素进行处理v使用数组
3、下标访问数组元素使用数组下标访问数组元素 ,对单个数组元素进行处理,对单个数组元素进行处理IC-MSP指针变量指向一个数组首地址 v数组的指针数组的指针是数组的地址,即数组的起始地是数组的地址,即数组的起始地址,也就是数组第一个元素的地址址,也就是数组第一个元素的地址v数组元素的指针数组元素的指针是数组元素的地址是数组元素的地址IC-MSP一维数组的指针和指针变量 10111219arr0arr1arr2arr91002100410181000p1000IC-MSP一维数组的指针和指针变量 10111219arr0arr1arr2arr91002100410181000数组的指针数组的指针ar
4、r 或或&arr 0数组元素数组元素数组元素的指针数组元素的指针1000p指向数组的指针变量指向数组的指针变量IC-MSP一维数组的指针和指针变量 v定义时初始化定义时初始化v通过赋值初始化通过赋值初始化int arr10, *p = arr;或者或者int arr10, *p = &arr0;int arr10, *p;p = &arr0; 或者或者 p = arr; IC-MSP一维数组的指针和指针变量10arr011arr112arr213arr314arr415arr516arr61000pp = arrp + 31000IC-MSP引用一个数组元素 v下标法,如下标法,如arri v
5、地址法,通过数组名计算元素地址,找出元地址法,通过数组名计算元素地址,找出元素的值,如素的值,如*(arr + i)v指针法,用指针变量指向数组元素,如指针法,用指针变量指向数组元素,如*(p + i)IC-MSP一维数组的指针和指针变量演演 示示 以三种方式输出数组中的值以三种方式输出数组中的值 IC-MSP一维数组的指针和指针变量v地址法地址法10arr011arr112arr213arr 314arr 419通过数组名计算地址过程通过数组名计算地址过程arr 9i=0arrarr+1i=1arr+2i=2arr+9i=9*(arr+i)IC-MSP一维数组的指针和指针变量v指针法指针法1
6、0arr011arr112arr213arr 314arr 4191000pp=arr1000指针引用过程指针引用过程arr 9i=0pp+1i=1p+2i=2p+9i=9*(p+i)IC-MSP二维数组的指针和指针变量 IC-MSP二维数组的指针和指针变量 v定义时初始化定义时初始化v通过赋值初始化通过赋值初始化int arr34, *p = arr;或者或者int arr34, *p = &arr00;int arr34, *p;p = &arr00; 或者或者 p = arr;IC-MSP二维数组的指针和指针变量IC-MSP字符串#include void main() char s20
7、, *p; int i; p = s; printf(请输入一个字符串请输入一个字符串:n); gets(p); for(i = 0; pi != 0; i+)if(pi = m) printf(有字符有字符mn); break; if(pi = 0) printf(没有字符没有字符mn); IC-MSP字符串#include void main() static char s = my name is rose; char *p = s; int i; for(i = 0; pi != 0; i+)if (pi = m) printf(有字符有字符mn); break; if(pi = 0)
8、 printf(没有字符没有字符mn);char *p = my name is rose;或者IC-MSP指针作为函数参数-传值调用 #include void f(int x) x = x + 10;void main() int i = 0; f(i); printf(i = %dn , i); IC-MSP指针作为函数参数-传值调用 传值调用传值调用在在C盘找到一个文件盘找到一个文件 将该文件复制、粘贴将该文件复制、粘贴到到D盘盘 双击打开双击打开D盘的该盘的该文件,编辑并存盘文件,编辑并存盘 010001000传递传递 0i0x+1010x复制文件复制文件IC-MSP指针作为函数参数
9、引用调用 演演 示示 引用调用引用调用 IC-MSP指针作为函数参数引用调用 #include void f(int x) x = x + 10;void main() int i = 0; f(i); printf(i = %dn , i); IC-MSP指针作为函数参数-引用调用 引用调用引用调用在在C C盘找到一个文件盘找到一个文件创建该文件的快捷方式,并将快捷方式放置到创建该文件的快捷方式,并将快捷方式放置到D D盘盘双击打开双击打开D D盘的快捷方式,编辑并存盘盘的快捷方式,编辑并存盘操作快捷方操作快捷方式式IC-MSP一维数组作为参数 演演 示示 数字排序数字排序 IC-MSP二维
10、数组作为参数 演演 示示 找最大值找最大值 IC-MSP单个结构指针变量作为函数参数演演 示示 打印成绩单打印成绩单 IC-MSP结构数组指针变量作为函数参数 演演 示示 按成绩由高到低打印成绩单按成绩由高到低打印成绩单 IC-MSP总结第第1212章章数组的指针是数组在内存中的首地址数组的指针是数组在内存中的首地址 函数两种参数传递的方式:按值传递、按引用传递函数两种参数传递的方式:按值传递、按引用传递 数组名和指向数组地址的指针变量作函数参数时,效果是一样的数组名和指向数组地址的指针变量作函数参数时,效果是一样的 结构体指针作为函数参数传递的是结构体变量或结构体数组的地址结构体指针作为函数参数传递的是结构体变量或结构体数组的地址 IC-MSP习题1、从10个整数中找出最大值和最小值(用数组名做参数、用指针作参数)2、输出二维数组中任一元素的值(用指针实现)3、用函数调用实现字符串的复制main()inta=5,*b,*c;c=&b;b=&a;程序在执行了c=&b:b=&a;语句后,表达式:*c的值是A)变量a的地址B)变量b中的值C)变量a中的值D)变量b的地址IC-MSP作业1、两道课后题2、写一函数,求一字符串的长度。在main函数中输入字符串,输出长度,函数完成求长度