指针学习笔记

        指针本质上就是一个变量的地址,通过这个地址可以引申出许多新的变化和更简洁的代码表达方式。

1、关于指针的符号:

主要就是两种:解引用操作符(*)、取地址操作符(&)

解引用操作符有两种使用情景:声明一个指针的时候、将指针解引用指向指针内储存的地址的变量,改变变量或者使用变量。

取地址操作符的使用情形:将一个变量的地址显示出来从而让给指针赋值。 

int* p=&a;

*p=b

2、特殊指针

2.1:指针常量和常量指针:

指针常量:指针指向的内容是常量,不能通过指针解引用改变;但指针可以改变从而指向其他常量。

常量指针:指针本身是个常量,指针指向的内容可以改变,但是指针地址不能改变。

const int*ch;
int const* ch;//指针常量

int *const ch;//常量指针

const int *const ch;//常量指针常量

2.2:指针函数和函数指针:

指针函数:返回值是指针的函数;

函数指针:指针指向的对象是函数;

int* add(int a,int b)
{
...
return *p;
}
//指针函数

int a[10]={0};
int (*p)[10]=a;
//函数指针,(*p)[10]代表这指向一个有十个元素的数组,其中*p指向a数组的首地址
//(*p+i)指向数组的第i+1个元素

3、用指针访问数组:

3.1、指针的特性:设定一个指针的数据类型之后,虽然不同类型指针所占的空间都是一样大的,但是指针p+1是指向相邻的一个同类型元素,因此,不同类型指针+1后跳过的内存大小是不一样的,例如char类型跳过1个内存单位,int类型跳过8个内存单位。

3.2、数组地址的特性:数组的内存都是连续存在的,因此可以通过数组的第一个元素地址以及数组的数据类型访问数组的元素(也因此一维数组定义不一定要写出数组大小),一维数组a第i个元素地址是&a+i。

二维数组有点不同,对二维数组A[2][3]来说,A代表A[0][0]的地址,A+1代表A[1][0]的地址,每次加一跳过一个数组(于是定义二维数组必须知道列数,不然无法准确访问到具体位置)

3.3用指针访问数组:

int a[4];
int* p=a;

//a[i]=*(p+i);
_________________________

int a[2][3];

方法一:
int*p=a[0][0];//指针指向第一个元素

//a[i][j]=*(p+i*3+j);

方法二:
int *p[2];//建立指针数组
for(int i=0;i<2;i++)
    *p[i]=a[i];

//a[i][j]=*(p[i]+j)

方法三:
int (*p)[3]=a//指针数组指向a的行,每个元素都指向一个数组

//a[i][j]=*(*(p+i)+j);//p代表指针数组的首地址,p+i指向第i行首地址的地址,*(p+i)就是第i行的首元素地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值