指针的学习

写在前面

最近在学习Qt时候,接触到了指针,由于作者对指针的了解微乎其微,所以系统的学习了一下,写了这篇文章,方便以后回忆指针

指针的注意和用处:

1.在调用函数的时候,你想修改这个变量的值,但是在调用函数时候只能局部修改,出了这个函数除非return重新赋值,很难修改,你可以传一个指针进去,然后通过作用到地址上的值,然后达到修改变量的功能

2.操作指针的时候记得注意指针的位置,比如在对指针进行p++的时候,就要注意指针的位置,注意什么时候是否需要将指针重新置于数组的开头*

初探指针

& 运算符"&“是一个返回操作数地址的单目运算符,叫做取地址运算符 就是变量前面加了一个&,你就可以得到这个变量存放的地址
* 运算符”*"是单目运算符,叫做指针运算符,作用是返回指定地址内的变量的值

作者认为指针就是一个地址,而这个地址存放的是另外变量的位置,解释不如上代码,比如下面代码

int i  =0;
int *j = &i;

上面代码,第一行代码定义了一个int型的变量i,给i赋值为0,下面代码定义了一个int型的指针,赋值的时候用上&,&这个符号就是取地址,&i就是i地址,将其赋值给指针变量j。
继续上代码

 int i  = 1;
    int *j = &i;
    qDebug()<<"i"<<i;
    qDebug()<<"&i"<<&i;
    qDebug()<<"j"<<j;
    qDebug()<<"&j"<<&j;
    qDebug()<<"*j"<<*j;
    qDebug()<<"&*j"<<&*j;
    qDebug()<<"*&j"<<*&j;
    qDebug()<<"**&j"<<**&j;

运行结果:

i 1
&i 0x7db9c4
j 0x7db9c4
&j 0x7db9b8
*j 1
&*j 0x7db9c4
*&j 0x7db9c4
**&j 1

由上面代码可以的知道j=&i,所以可以这样理解,j指向i,即j就是i的地址。而*j=i,加了*说明是取值

指针变量

指针变量的一般形式

定义:如果有一个变量专门用来存放另一变量的地址,称之为指针变量

类型说明 * 变量名     //*表示这是一个指针变量,变量名即为定义的指针变量名,类型说明表示本指针变量所指向的变量的数据类型

指针变量的赋值

//1.
int a;
int *p =&a;
//2.
int a;
int *p;
p=&a;   //不用加*  不能给指针变量赋常数

指针的算数运算

指针只有加法和减法两种算数运算

   int i=10 ;
   int *p ;
   p=&i;
   qDebug()<<"the result is:"<<p;
   p++;
   qDebug()<<"the result is:"<<p;

运行结果:

the result is: 0x7dbad4
the result is: 0x7dbad8

指针加减,并不是数值上+1和-1,而是在相加于你的变量类型,int占两个字节,所以由0x7dbad4->0x7dbad8,增加了两个字节。

一维数组与指针

对数组来说,数组名就是数组在内存中存储的首地址,指针变量用于存放变量的地址,也可以存放数组的首地址或数组元素的地址

指向数组元素的指针

1.
int *p a[10];
p=a;
2.
int *p,a[10];
p=&a[0];

使用指针访问数组

访问数组的地址

以上面代码为例子进行讲解,定义了一个a[10],这个数组是从a[0]~a[9],获取这个数组的地址有两种方法
第一种:使用取地址符号,也就是&, &a[0],就是获取数组第一个元素的地址,&a[0],&a[1]…
第二种:使用指针, p=a;将p指针指向了a的第一个元素的地址,于是p,p+1…对应&a[0],&a[1]的操作

访问数组的值

以上面代码为例子进行讲解,定义了一个a[10],这个数组是从a[0]~a[9],获取这个数组的值有两种方法
第一种:使用取地址符号,也就是*, *(a+0),就是获取数组第一个元素的地址,*a,*(a+1)…
第二种:使用指针, p=a;将p指针指向了a的第一个元素的地址,于是*p,*(p+1)…对应*a,*(a+1)的操作 初次之外 p[n]=*(p+n)

等待后续更新吧~~~~~~~~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值