A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Meracle 中级黑马   /  2015-11-14 17:29  /  950 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

指针,其实也是一种数据类型,占有四个字节,不过其中放置的是某个地址(也就可以理解成它指向了某一块内存空间)。

C语言中经常操作地址,所以指针的引入使我们更加便利的执行某些地址的操作。

1、某些容易混淆的指针定义。

int *p;int类型的指针,它所指向的是一个int类型的变量所在的内存区域。

int *p[n];int类型的指针数组。这是一个数组,里面存放了n个int *类型的变量。

int (*p)[n];int类型的数组指针。这是一个指针,可以看作是int(*)[n],它指向了一个数组的首地址,这个数组里面含有n个int类型的变量。

int *fun(int a);带有一个int类型参数,返回值是一个int类型指针的函数。

int (*fun)(int a);这是一个函数指针,这个指针指向了一个函数的首地址,这个函数有个int类型的参数和int类型的返回值。

2、const修饰的指针

const int *p;const修饰的是int *,也就说p指向的地址类型 int,而且是不可变的。p的指向可变,但是所指向的地址中的内容不能改变

int * const p;const修饰的是p,当const修饰p的时候,表示这个指针的内容不能改变,也就是它的指向不能改变,但是它所指向的内存空间并没有被const修饰是可以改变的。

3、指针移动操作。

int a[10] = {1,2,3,4,5,6,7,8,9,0};

int *p = a;

当前p指向的是a的首地址,*p(也就是指向的内存空间的内容)也等于a[0];

当p进行++操作之后,因为它是int类型的指针,它每次++就会指向下一个int类型,也就会移动到a[1]的位置,当前*p 就会等于a[1];

另外一种就是(&a)+1,其中&a可以理解为将数组看成一个整体,取其地址,在这个基础上加一,其实移动了10个int的大小。

8 个回复

倒序浏览
总结的不错喔 指针有点难度的吧
回复 使用道具 举报
指针很晕
回复 使用道具 举报
谢谢分享啦
回复 使用道具 举报
支持一下
回复 使用道具 举报
多谢分享,对初学者非常有用
回复 使用道具 举报
比如int*p=a,可以这么理解,p是存储a变量的地址
回复 使用道具 举报
学习了,真的不错!!
回复 使用道具 举报
学习了 ,先看看再说
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马