单片机C语言学习心得_单片机c语言学习心得

2020-02-29 学习培训心得体会 下载本文

单片机C语言学习心得由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“单片机c语言学习心得”。

8、指针的使用

8.1 在定义的时候,*ap中的‘*’是指针类型说明符;

在进行指针预算时,x = *ap 中的‘*’是指针运算符。8.2 如果在已定义好的指针变量,并引用,即

int *ap, int a;ap = &a;则在进行指针运算的时候:

(1)*ap与a是等价的,即 *ap就是a;

(2)&*ap:由于*ap与a等价,则&*ap与&a等价(地址);

(3)*&a:由于&a = ap,则*&a与*ap等价,即*&a与a等价(变量);(4)*ap++相当于a++。

8.3 指向数组的指针变量的定义,应用,赋值:

int a[10];int *app;则有两种方法:app = &a[0];或 app = &a;(1)app+I 或a+i就是数组元素a[i]的地址;(2)*(app+i)或 *(a+i)就是元素a[i]中的内容;

(3)指针变量也可以带下表,即app[i]与*(app+i)等价。8.4 数组和指针可以互换,但在代码执行的效率上却大不相同。用数组找元素必须每次计算元素的地址,效率不高;而用指针则直接指向某个元素,不必每次计算地址,可以大大的提高运算效率。8.5 关于指针的运算:

(1)p++(或p+=1):使指针p指向下一个数组元素,地址加1;

(2)*p++:先得到p指向的变量值,再执行p加1,指向下一个数组元素;(3)*++p:先使p加1,指向下一个数组元素,再去p指向的变量值;(4)(*p)++:表示p指向的变量值加1;

(5)若p指向当前数组中的第i个元素,则:

(p--)与a[i--] 等价:先执行*p,然后p自减;(++p)与a[++i] 等价:先执行p自加,再执行*p;(--p)与a[--p] 等价:先执行p自减,再执行*p。

8.6 指向多维数组:

定义一个二维数组:a[3][4];定义一个指针变量:(*p)[4];(注意:列数相同(第二维相同))使指针变量指向数组:p = a;此时: p与a等价:指向数组a[3][4]的第0行首地址;

p+1与a+1等价:指向数组a[3][4]的第1行首地址; p+2与a+2等价:指向数组a[3][4]的第2行首地址;

而:

*(p+1)+3与& a[1][3]等价,指向a[1][3]的地址;

*(*(p+1)+3)与a[1][3]等价,表示a[1][3]的值; 一般的:对于数组a[i][j]来讲,有

*(p+i)+j相当于&a[i][j],表示第i行第j列元素的地址; *(*(p+i)+j)相当于a[i][j],表示第i行第j列元素的值。

8.7 指向结构体:

如果指针p指向结构体数组msg1[0]的首地址,则:

(1)(*p).flg与p->flg和msg1[0].flg三者完全等价,即(*p).成员名 与p->成员名 以及 结构体数组元素成员名三种形式是等价的;

(2)p+1:使指针指向结构数组msg1[0]的下一个元素msg1[1]的首地址;(3)由于指向运算符->的优先级高于自加运算符++,则:

(++p)->flg:先使p自加1指向msg1[1]的地址,再指向msg1[1]的flg成员值;(p++)->flg:先得到msg1[0].flg的值,再使p自加1指向msg1[1]的首地址;

p->flg++:先得到msg1[0].flg的值,使用完后再使msg1[0].flg的值加1; ++p->flg:先将msg1[0].flg的值加1,再使用。

《单片机C语言学习心得.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
单片机C语言学习心得
点击下载文档
相关专题 单片机c语言学习心得 学习心得 单片机 语言 单片机c语言学习心得 学习心得 单片机 语言
[学习培训心得体会]相关推荐
    [学习培训心得体会]热门文章
      下载全文