- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C指针编程之道
第一章:
指针变量的值就是地址。
指针变量定义的一般形式:
类型说明符 * 变量名
类型说明符:表示该指针变量指向的变量的数据类型,且该指针变量只能只想该数据类型
的变量。(特型)
使用指针变量时必须进行的操作,即是给指针变量赋值,让其指向指定的内存单元。
指针变量在使用前,必须要让其指向某个具体的变量,即指向某个具体的内存单元才能正确引用。
1.2.3小结:
指针是一种数据类型,专门存放地址的数据类型。俗称的指针式指地址。指针式常量,然而指针变量时变量(指针变量既是 *pStu)。指针变量使用前必须指向具体有效的内存单元。
地址运算符 是一元运算符只能去内存中变量的地址。
取值运算符* 是一元运算符能获取指针所指向的变量的值。
指针变量在使用前不仅要先定义还要先赋值。(既是使用前要初始化)
指针变量在赋值时只能赋兼容类型的值。
指针做整数加法操作时如:pNum++ (是int型)实际是地址改变了2*n个单位
例如原始地址为 2A01做了++操作后变为2A03 (在这里int型为2字节)。
Ps:在做指针整形操作时,要注意是否超出了数组的大小。(减法也是一样)
指针与指针的减法:
必须要指向同一个数组。结果为两个元素之间的元素个数。
如果pNew指向Num[0],pOld指向Num[3]。
那么pOld - pNew = 2 因为他们之间的元素个数为Num[1],和Num[2]。
实际就是两个指针指向的地址之间的减法。
:
数组是构造类型;但是数组元素属于基本类型,也有指针。
指针变量指向数组元素: pStr = str[6];
指针变量指向数组: pStr = str ;(str已经定义为数组)
输出定义的数组: printf(str : %s \n , str); (由于str是一个字符串 ,则会输出整句)。
%p是输出内存地址。
数组名是常量,指针变量时变量。
下标法必须通过额外的变量来充当编号,用于访问每一个元素,指针只要知道数组的首地址就可以访问所有的元素。
数组较大时,用指针法访问比较方便。
编译器在编译数组时,是按数组首地址加上各元素的偏移量的方式找到相应元素,再进行编译,既是指针法的方式。(高效性体现,数组越大,优越性越明显)
指针数组定义的一般形式:(由指针变量组成的数组)
类型说明符 *数组名[数组长度]
类型说明符:表示指针值所指向的变量的类型
*数组名: 表示这是指针数组
如:int *num[3]; 定义为这是一个指针数组 , 每个数组元素都是一个指针变量 ,该指针变量指向int 类型的数据。
可以表明 name[0] --- china
name[1] ---beijing
name[2] ---longmai
指针数组较多的用来访问字符串。
字符串指针变量指向字符串的首地址; 可以移动字符串指针变量。
:
函数是为了完成没想特定功能而编写的程序块。
函数参数可以分为两种:1.传递的是变量的数值,称为普通参数
2.传递的是变量的地址,称为指针参数
在函数中形参的变换不会让实参也发生变化。 因为在函数调用时,给形参分配了独立的内存空间,实参把值传递给形参,实际只是copy其内存地址的内容去到形参的内存地址。所以形参交换不会影响实参。
(形参与实参虽然是同样的值,但是存储在不同的内存地址)
所以要完成函数调用时并进行实参的交换就要用到指针。
在函数调用时把指针作为函数参数,既是传递变量的地址。
在被调函数中,通过指针操作相应的变量就是直接操作本身。(改变形参就是改变实参)
如:
定义Swapdata( char *p_dat_x , char *p_dat_y)
定义char *p_x , *p_y;
定义char x,y;
有 p_x = x ; p_y = y;
Swapdata(p_x , p_y)
在函数swapdata中的操作既是对于 x,y的直接操作。
0x表示16进制
设定结构体时,如
Struct
{
Char head;
Char len;
Char add;
Char data[3];
Char chk;
}RF_FRAME;
定义RF_FRAME *ptr_tmp;
且定义了结构 RF_FRAME txbuf = {};
Ptr_tmp = txbuf ; 则指针ptr_tmp指向结构txbuf的首地址。
小结:
指针变量作为实参时,实际是让形参同时指向实参指
文档评论(0)