指针学习

来源:互联网 发布:java程序开发步骤 编辑:程序博客网 时间:2024/05/01 10:50

指针

不同类型的指针,没有经过强制类型转换,不能互相赋值

int *pn, char *pc. char c = 0x65;pn = pc ;//编译出错pn = &c ;//编译出错pn = (int *)&c;int n = *pn;//值不确定

两个同类型的指针可以相减

p1-p2=(地址p1-地址p2)/sizeof(T)//地址间可以存放T型变量的个数注:指针的大小,sizeof(p)=464位系统为8

p++

p指向n+sizeof(T)

指针使用 “[ ]” p[n]表示*(p+n)

数组的名字就是一个指针常量: T a[n] ,则a的类型是T*,可以用a给一个T*类型的指针进行赋值。作为形参时,T *p等价于 T p[ ]。

T a[M][N]

T **p ;
p是指向指针的指针,p指向的地方应该存放着一个类型为T*的指针, * p的类型为T *

指针和字符串
字符串常量的类型是 char *
字符数组的类型也是 char *
void *p 指针,
由于sizeof(void)没有定义,所以*p 无定义,++p,–p,p+=n,p+n均无定义
作用
系统库函数,cstring中,memcpy

void *memcpy(void *dest,void *src,int n);//将地址src开始的n个字节,拷贝到地址dest,返回值是dest//调用示例int a1[10];int a2[10];memcpy(a2,a1,10*sizeof(int));//将a1的内容拷贝到a2中,结果是a2[0]=a1[0].a2[1]=a1[1],……

函数指针
在程序运行期间,每个函数会占用一段连续的内存。函数名就是该函数所占内存区域的起始地址(入口地址)。我们可以将函数名赋值给一个指针变量,使得该指针变量指向该函数。然后通过指针变量就可以调用这个函数。这种指向函数的指针变量就称为“函数指针”。

快速排序函数qsort//void qsort(void *base,int nelem,unsigned int width,int *pfcompare(const void*,const void*));//pfcompare:函数指针,它指向一个比较函数,该函数的的形式:int 函数名(const void *elem1,const void *elem2);

指针和结构体
定义指向结构变量的指针

结构名 *指针变量名

通过指针,访问其指向的结构变量的成员变量:

指针->成员变量名或:(*指针).成员变量