指针不是打针

来源:互联网 发布:windows xp 雨木林风 编辑:程序博客网 时间:2024/04/30 00:08

看到很多人学习C和c++时,都在指针这里有点问题,所以本人总结了一些个人理解,希望能够帮助有疑惑的同学们微笑

本来有图和代码,但找不到了,所以把文字的东西整上来了



指针不是打针,大家不要害怕
指针是什么东西?地址????
指针就是一个变量,值是地址,可以运算,(+ - * / < > (有些算法没有意义)),与一般变量有点区别(汉语里,近意词)
指针有什么用?
指针就是访问一块区域的另一种途径,(把指针当成指路标),同一个区域可以有多个指针指向,通过任意一个指针都 可以访问这个块区域


指针定义:
类型 *指针名;//在定义时用星表示这个变量 是个指针(在定义时,这个星除了说明这个变量 是指针,没有其他作用),定义完以后,如果 用这个星,就表示取得指针指向的变量(*指针名 就是指向的变量),不用星就是指针
跟数组相似,[],在定义时,[]里放的是长度,但是定义 完后,再用[],里面就是下标


指针的大小 :
指针在32位系统下是4个字节,什么类型的指针都是4个字节,(void*也是4个字节),指针都 是4个字节,在定义指针时,要加个类型呢????指针的类型就是告诉编译器,我要指向至少多大的内存,还有就是在指针计算时,(+-)char*p;p+1;//加减1时移动1个类型的大小,(void*加减1移动几个字节???1个字节,如果 是自定义类型加减1sizeof(自定义类型))


指针的使用:
最常 用在函数的参数里,可以修改实参,形参不能修改实参


在指针初始化时,赋值是给指针赋值,不是给*指针名 赋值,原因是,在定义指针时,星只表示 这个变量是指针


二级指针等多级指针:
什么 是二级指针???
指向一级指针 的指针就是二指针
int a;
int* p1 = &a;
int* p2 = p1;//p2就一级指针,
int**pp = &p1;//两个星才是二级指针
低级指针给高级指针赋值要用取地址,同级不用取地址,而叫赋值
二级指针有什么 作用???
二级指针作用一,修改指向的一级指针的值(一级指针的指向)


特殊指针:
const int* p;//const *p//通过*p的方式不能修改变量的值
int const* p;//const *p//同上
int* const p;//*const p//指针的指向不能改变
助记方式:把类型去掉,看const后面是什么 ,是*p表示不能通过*p的方式改变变量的值,如果是p,表示p的指向不能改变


#define PINT int*
typedef int* pInt;
//宏,只是简单的替换
//typedef 给一个类型起个别名(重点是类型)
PINT P1,P2;//int *p1,p2;//p1是指针,p2是变量
pInt P3,P4;//int *p1,*p2;//p1,p2都是指针


指针数组:(重点是数组)
数组的每个元素都是一个指针
类型* 数组名[长度];
数组指针:(重点是指针)
类型 (*数组名)[长度];//数组指针指向的数组的长度必须要一样


函数指针:
函数指针就是一个指针,只是类型是一个函数,问题?函数也有类型???
函数也有类型,返回类型与参数列表决定函数的类型(参数列表包括类型,个数,顺序)


int abc(int ,char);//abc是:返回类型为int,参数为int,char的类型
int cab(char ,int);//cba是:返回类型为int,参数为char,int的类型,(abc与cba不是同一个类型)
函数指针的定义:
int *abc(char);//返回类型为int*的,参数为char的函数
int(*abc)(char);//这个才是函数指针的定义


typedef int (*PFUNC)(char);
表示,PFUNC就是一个返回类型为int,参数为char的函数类型的别名
PFUNC是一个类型了,就可以定义变量了,如是定义 变量 ,那这变量 就是PFUNC的类型


1,void* abc(int i,void*(*pfunc)(void*));


2,typedef void*(*Pfunc)(void*);
3,void* abc(int i,Pfunc pf);


2,3组合,与1相同


int* abc(){
  int n = 10;
  //..计算
  int *pn = &n;
  return pn;
}
//问题,不能返回 指向局部变量的指针(而不是局部指针变量),但可以返回指向堆,或者静态,或者生命周期长的变量 



如要转载,请标明出处,谢谢
http://blog.csdn.net/chenhl1988/article/details/12389463








原创粉丝点击