C语言-关于指针总结笔记

发布于:2021-05-15 10:22:56

脆弱的人才会四处游说自己的不幸,坚强的人只会不动声色地成长。



一、指针说明


指针是包含另一变量的地址变量。


1、int *p



p是一个指针,指向整型数。



2、int *P()



p是一个函数,该函数返回一个指向整型的指针。






3、int (*p)()






p是一个指针,该指针指向一个函数,这个函数返回一个整数。






4、int *p[]






p是一个数组,该数组的每一个元素是指向整数的指针。






5、int (*p)[]






p是一个指针,该指针指向一个数组,这个数组的每一个元素是一个整数。






6、int *(*p)()






p是一个指针,该指针指向一个函数,这个函数返回一个指向整数的指针。







二、指针的初始化(赋地址)






1、通过符号&取变量(包括结构变量、数组第一个元素)的地址赋给指针;






2、把数组名赋给指针;






3、把函数名赋给指向函数的指针;






4、动态分配内存;






示例:






struct c {double r,i;};






struct c *p;






p=(struct c*)malloc(sizeof(struct c));







三、指针与数组、函数的关系






1、对于一维数组int a[]或指针int *a






a+i指向a[i]






2、对于字符串char s[i]或指针char *s






s+i指向第i个字符s[i]






3、对于二维数组int a[i][j]






*a+j指向a[0][j]






*(a+i)指向a[i][0]






*(a+i)+j指向a[i][j]






示例:






对于a[2][3]={1,2,3,4,5,6};






有*(*(a+1)+1)=5;






4、对于字符串数组char p[i][j]或字符型指针数组char *p[i]






*p+j指向第0个字符串的第j个字符






*(p+i)指向第i个字符串的第J个字符






示例:






对于*p[]={"ABC","DEF"};有*(*(p+1)+1)="E";






对于char P[3]={"ABC","DEF"};有*(*(p+1)+1)="E";






5、对于指针数组int *a[i]






a[i]指向变量i,即*a[i]=变量i或a[i]=&变量i






6、对于结构struct XY






{int x;int *p}*p;






p是指向结构XY的指针






(*p).x或p→x是表示x的内容






(*p).y或p→y是表示指针y的值(地址)






*(*p).y或p→y是表示y所指的内容






&(*p).x或&p→x是表示x的地址







四、指针的分类






1、*指针(near)






*指针为16位指针,它只含有地址的偏移量部分,*指针用于不超过64K字节的单个数据段或代码段。在微、小和中编译模式下产生的数据指针是*指针(缺省状态),在微、小和中编译模式下产生的码指针(指向函数的指针)是*指针(缺省状态)。






2、远指针(far)






远指针为32位指针,指针的段地址和偏移量都在指针内,可用于任意编译模式,每次使用远指针时都要重装段寄存器,远指针可寻址的目标不能超过64K,因为远指针增减运算时,段地址不参与运算,在紧凑、大和巨模式下编译产生的数据指针是远指针(缺省状态)。






3、巨指针(huge)






巨指针为32位指针,指针的段地址和偏移量都在指针内,可用于任意编译模式,远指针可寻址的目标可以超过64K,巨指针是规则化的指针。







五、指针的转换






1、远指针转换成巨指针






使用以下函数






void normalize(void far **p)


{


? ?*p=(void far *)(((long)*p&0xffff000f)+(((long)*p&0x0000fff00<<12));


}







六、指针的使用






1、将浮点数转换为二进制数






float ff = 16.5;






unsigned char *cc;






(float*)cc=&ff;






此时cc的内容为“00008441”,即cc第一个字节=0,第二个字节=0,第三个字节=0x84,第四个字节=0x41。






2、将二进制数转换成浮点数






float ff;






unsigned char *cc;






cc=(unsigned char *)malloc(4);






cc=(unsigned char *)&ff;






*(cc+0)=0;






*(cc+1)=0;






*(cc+2)=0x84;






*(cc+3)=0x41;






//此时ff=16.5;






free(cc);






到此,指针笔记就全部码完了,认真掌握了C语言指针的用法对于以后学*C++等编程语言有很大的帮助,并且灵活运用好指针也能敲出一行行高质量的代码

相关推荐

最新更新

猜你喜欢