学习记录:指针

Posted salty-fish

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习记录:指针相关的知识,希望对你有一定的参考价值。

1. 指针是什么?

指针就是内存的地址,指针变量就是能够保存内存地址的变量。

一般数据类型变量名指的是这个数据所代表的值。

2. 如何定义指针?

在最开始声明一个指针变量的时候,为了表明是一个指针变量,要在变量名前加“*”(间接引用符),在后续的使用中则不用加“*”了

下面两种写法是等价的

//一个变量
int a;
//第一种,分开写
int *t;
t=&a
//第二种
int *t=&a

前面的数据类型表明了指针指向的是什么样的数据类型

3. 具体用法

3.1:通过指针剪间接修改变量值

还是用上面的例子,下面两种写法是等价的

a=200;//直接修改
*t=200;//间接修改

其实把*t看作a也行

3.2:指针的初始化

int *t=&a;
//指针类型 *指针变量名 = &变量
//注意指针指向的数据类型要和指针类型一致

3.3:注意事项

指针数据只能使用四种值

1. 0值 常量 表达式

int a,b=0;
int *t=a;//错,不能把整形数据赋给指针变量
int *t=b;//错,b是个变量
int *t=400;//错,非0  
int *t=null;//对,null可以看作0
int *t=0;//对,是0,是个常量

2.  不能指向不同的数据类型

3.  直接将相同类型的指针互相赋值

4. 类似于数组的,在下一个地址处有有效的数据类型的

 

4. 无效的指针类型

1. 0值指针

刚才说过0可以赋值给一个指针变量,但这是无效的

2. 指针未初始化且未赋值时

这种指针很明显是无效的

3. 指针指向的变量的内存空间已经被释放了(迷途指针)

同上

三种类型都是没有指向一个确定的对象,因此无效

 

5.  指针的运算

指针的运算一般只有在连续的储存空间中才有意义(比如数组)

(否则没有指向一个确定的对象,这个指针就是无效的啊)

int x[10],*p=&x[5];
p+1//指向x[5]的后一个int变量
p-1//指向x[5]的前一个int变量
也可以加减一个变量
int n=1;
p+n,p-n都是可以的
自加自减也可以

两个指针可以相减(但是不能相加啊)

指针相减得到的值是这两个指针之间所有对象的个数

也可以比较大小(比较两个地址的大小关系)

 

6. const指针

第一种指针的定义:const 数据类型 *指针名

对于一个常量,我们可以用一个常量指针指向一个常量

(用变量指针编译都过不去)

相同的,一个常量指针也可以指向一个变量

但是,一个变量指针不能指向一个常量

 

一个常量指针也就代表了无法通过指针间接修改它所指向的值

因此一般用于函数,确保在函数中引用的值不会被改变

 

第二种指针 数据类型 const *指针名

它表明了这个指针指向的对象是不会改变的

因此,试图改变它指向的对象的操作都是非法的

但是要分开,这种指针可以间接改变它所指向的值

 

当使用带有const的指针时其实有两种意思。一种指的是你不能修改指针本身的内容,另一种指的是你不能修改指针指向的内容。听起来有点混淆一会放个例子上来就明白了。

 

 

第三种指针 const 数据类型 const *指针名

以此类推,这种指针是一种指向的对象不能够变化,也不能通过指针来修改对象的值的指针

以上是关于学习记录:指针的主要内容,如果未能解决你的问题,请参考以下文章

更新:C++ 指针片段

《C专家编程》学习记录——指针和数组相同的地方

C++ - 指针和“智能指针”

片段中的 EditText 上的空指针异常 [重复]

golang代码片段(摘抄)

QT 实用代码片段