您的位置:首页 > 编程语言 > C语言/C++

笔试复习_C++_指针(一)

2017-09-01 16:22 162 查看
*今天开始找一个地方存放复习资料~!

想到哪写哪吧_(:з」∠)_*

指针(一)

指针

定义:特殊类型变量,用来存放变量的地址。

一个变量的地址称为这个变量的指针;一个变量专门用来存放变量的地址,称为指针变量。

指针变量定义后,系统为之分配存储单元用来存放地址,长度为4字节(32位系统)。

类型名 *指针变量名[=<指针表达式>]

类型名:指针变量用来指向的类型。

*表示定义的是指针变量

例:

int *p;


取地址运算符&

用来返回操作数的地址,与一个变量或者数组元素连用。通过&可以将某一个元素的地址赋给指针。

例:

int a=1;
int *p;
int p=&a;


指针使用之前要先进行赋值,否则不确定。

间接访问运算符*

用来返回操作数所指的变量,与一个指针连用。

二级指针变量

类型名 ** 指针变量名

是指向指针变量的指针。

例:

int a=1;
int *p=&a;
int **pa=&p;


指针数组

类型名 ** 指针数组名[元素个数]

一系列指针变量的集合。每一个元素都是一个指针变量,具有相同的存储类型,指向相同的数据类型。

例:

int *p[2];


由p[0]和p[1]两个指针组成。都指向int类型数据。

指向常量的指针

const 类型名 *指针变量名[=<指针表达式>]

指针所指的对象是常量。(*p不可以修改,p可以修改)。

例:

int a=1;
const int *p=&a;


a不可以通过*p修改,但是可以通过a修改。

指针常量

类型名 * const 指针变量名[=<指针表达式>]

指针(p)不可以再指向其他对象,但是*p内容可以修改。

指针与一维数组

每个数组的起始地址称为数组的指针。一维数组的数组名就是起始地址,是一个指针常量。

int a[10];
int *p;


a与&a[0]等价,所以

p=a;




p=&a[0];


通过指针可以访问数组元素,例如给a[0]赋值为5:

int a[10]={0};
int *p;
p=a;
*p=5;


通过引用可以访问数组元素,例如给a[3]赋值为5:

int a[10]={0);
int *p;
p=&a[3];
*p=5;


无论数组类型如何,如果指针p指向数组一个元素,那么p+1就指向数组下一个元素。

若*p=a[0],那么

*(p+i)=a[i]


p+i和a+i等价,表示数组第i个地址,即&a[i]。

*(p+i)
*(a+i)
等价,表示数组第i个元素,即a[i]。

p也可以带下标。p[i]与*(p+i)等价,为a[i]。

指针与二维数组

二维数组的数组名表示整个数组的首地址。

a表示a[0]的地址,即&a[0]。a+1表示a[1]的地址,即&a[1]。

所以,a+i表示a[i]的地址,即&a[i],是一个指向一维数组的指针。

a[0],a[1],a[2]是一维数组名,表示一维数组的首地址。

a[0]即是&a[0][0],a[1]是&a[1][0]。a[i]是&a[i][0]。

a[0]+i表示&a[0][i]。

*(a+i)等价于a[i]。

*(a+i)+j等价于a[i]+j,即&a[i][j]。

所以数组元素a[i][j]可以表示为:

(a[i]+j)、((a+i)+j)、(a+i)[j]。

例题

1.下面程序的输出结果是?

include<iostream.h>
void main()
{
int n[][3]={10,20,30,40,50,60};
int (*p)[3];
p=n;
cout<<p[0][0]<<","<<*(p[0]+1)<<","<<(*p)[2]<<endl;
}


解:

可以通过下标访问,所以p[0][0]指数组第一个元素,为10。

p[0]指数组第一行的地址,p[0]+1就是p[0][1]的地址为&p[0][1],所以*(p[0]+1)为20。

*p就是p[0],所以(*p)[2]就是p[0][2]为30。

一维数组:

a <=> &a[0]

a+1 <=> &a[1]

*(a+1) <=> a[1]

二维数组:

a[0] <=>&a[0][0]

a[1]+1 <=> &a[1][1]

*a[0] <=>a[0][0]

*(a[1]+1 ) <=> a[1][1]

2.若有定义语句:char s[3][10],(*k)[3],*p;则以下赋值语句错误的是:

1.p=s;
2.p=k;
3.p=s[0];
4.k=s;


解:

p是指向char类型的指针。

s是二维数组首地址,s[0]的地址,是一个指向大小为10的一维数组的指针。

k是char类型,指向大小为3的一维数组的指针。

s[0]是一维数组首地址,表示&s[0][0]。

所以p和s、p和k、k和s的类型不同,1、2和4错误。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: