c/c++中指针

来源:互联网 发布:js轮播图代码 编辑:程序博客网 时间:2024/06/05 18:44

c/c++中指针小结
学好c/c++的话,必须精通指针,在这里我带大家复习一下指针,希望对大家有所帮助,同时文中有不对的地方,请大牛们指教!
先从简单到复杂的指针学起:
int p 这是一个整形变量
int *p 这是一个返回整形变量的指针
int p[3] p是一个由整形数据组成的数组
int *p[3] p是指针数组,p先与[]结合,再与 指针结合,p是一个由返回整型数据的指针所组成的数组
int ( * p)[3] p是数组指针,p先与 * 结合,再与[]结合,p是一个指向整数数据的数组的指针,即p是数组的首地址
int p(int) p是含有整数形参的返回值是整形的函数
int * p(int) p是含有整形参数,并且返回值是整形指针的函数
int (* p)(int ) p是一个指向有个整形参数,并且返回值是整形的函数指针
int *( *p(int ))[3] P是一个参数为一个整数,并且返回一个指向由整型指针变量组成的数组的指针变量的函数.(可以跳过)
想要学习指针,必须要了解指针四个方面的内容:
1 指针的类型
2 指针指向的类型
3 指针的值 或者叫 指针所指向内存区
4 指针本身所占据的内存区
指针的运算
指针可以加减一个整数,多用于数组中
指针也可以减去一个同类型的指针,但是指针不能加上一个指针
例:
int a[20]={0};
a++;a+=5;a-=3;这些是可以的;
指针的运算要注意的是不同类型的指针,或者是一级、二级指针的使用
char a[20]={0};
char *p=a;
char **pp=&p;
pp++;这里的pp+1指的是pp+sizeof(char *),而pp=&p,即&p+4,这个指针指向哪里我们就不知道了;
还有一种是一个常考的类型:
char a[20];
int p=(int )a;
p++; //p=&(a[4])
指针与字符串
char a[20]=”hello world” a是字符数组,也叫常量指针,其内容的改变只能是通过strcpy或者是strncpy
char *b=”nihao” b是字符指针
指针安全
对这些方面没有足够的重视,会造成系统的崩溃
例:
char a=’a’;
int b=&a; //这里最好写成int *b=(int )&a
*b=1234;
在32位系统中,a是只占1个字节,而将b指针等于a的地址,同时*b是int型的,占4个字节,即*b=1234,即b指向的内容,不仅占了a的一个字节,同时还占用了a之后的三个字节,因为我们不知道a后面的三个字符是否有用,所以这么做是非常危险的。
其他的一些指针使用,这里就不详细介绍,例如指针与结构体之间的关系等等,可能还有很多没有讲到的地方,下次注意到的时候,再补上吧!

0 0
原创粉丝点击