| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6751 人关注过本帖
标题:请问怎么理解二级指针和一级指针呢,新手求教
只看楼主 加入收藏
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
以下是引用叶纤在2020-3-31 14:28:47的发言:

可是我不知道什么是二级指针?对二级指针不理解,又怎么会理解二级指针的一元&和一元*的指针算术呢
学猪跑,起码要知道猪长什么样子吧,还要知道猪怎么跑的吧

和一级指针没什么区别 从类型A派生的一个指针类型
只是这个类型A 也是一个指针类型而已
知道什么是一级指针而不懂什么是二级指针的情况是不存在的

https://zh.
2020-03-31 14:35
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
收藏
得分:0 
好好好,我就是那个,只懂一级指针不懂二级指针的猪猪,行了吧

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-03-31 14:49
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
回复 12楼 叶纤
那么 你描述一下 一级指针的 一元&操作和一元*操作 和 指针算术
比如 int*

https://zh.
2020-03-31 14:52
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
收藏
得分:0 
一级指针就是指指针,就是内存地址,二级指针就是指向指针的指针,就是地址的地址,打个比方,你有一个箱子,里面有你要的东西,你的钥匙能打开箱子,钥匙就是一级指针,你要用钥匙打开别的箱子去拿到开你要的东西的箱子的钥,那你手上的钥匙就是二级指针,如此类推…
2020-03-31 15:31
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
回复 14楼 自学的数学
这样的描述 就不谈对不对吧
对指针的使用没什么帮助

https://zh.
2020-03-31 15:53
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
收藏
得分:0 
以下是引用lin5161678在2020-3-31 14:52:22的发言:

那么 你描述一下 一级指针的 一元&操作和一元*操作 和 指针算术
比如 int*

我不懂什么是一元二元的
&符号目前我知道有三种意思
1,位运算的和运算符英文是bit-and
2,是引用符号
3,是取地址符号
*目前我知道三种
1,乘法符号
2,指针符号
3,解引用符号
关于一级指针,用的最多的是指针运算符,取地址运算符和取消引用运算符
 在定义一个变量的时候会分配一个空闲地址,然后变量的任何值会存在地址中
程序代码:
#include <iostream>
using namespace std;
int main()
{
    int num=4;
    cout<<&num<<"    ";
    int * p=&num;
    cout<<*p;

}

cout<<&num<<"   

从上面的例子看,使用了取地址符号看见了分配变量的地址
int * p=&num;

p是指向一个int类型的指针,p里装的是num的指针,num通过取地址符,返回一个带有值地址的指针,p接收num的地址
cout<<*p;

此地为解引用符号,取消引用访问特定地址的值
指针算数
我目前只知道数组啊,还有迭代器,本人基础差,还需要学习的更多,
程序代码:
#include <iostream>
#include<vector>
using namespace std;
void arraynum()
{  vector <int>myarray{1,2,3,4};
myarray.resize(5);
cout<<&myarray[0]<<"  ";
cout<<&myarray[1]<<"  ";
cout<<&myarray[2]<<"  ";
cout<<&myarray[3]<<"  ";
cout<<&myarray[4]<<"  ";

}
int main()
{
    int num=4;
    cout<<&num<<"    ";
    int * p=&num;
    auto tex1= p+1;
    auto tex2=p+2;
    auto tex3=p+3;
    cout<<tex1<<"  ";
    cout<<tex2;
    arraynum();
}

从上面可以看见,p+1,+2,+3..表示加了多少类型字节数,int型的
p+3,表示地址加了3个整数12个字节,
如果用在数组上表示数组第几个元素的地址,使用解引用符号就可以看见里面的值*(myarray+1)

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-03-31 16:20
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
回复 16楼 叶纤
全部再加一个 *
就是二级指针了 是不是很简单

https://zh.
2020-03-31 16:42
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
回复 16楼 叶纤
比如这句话
p+1,+2,+3..表示加了多少类型字节数,int型的

换成p换成二级指针 就也只是
p+1,+2,+3..表示加了多少类型字节数,int*型的


https://zh.
2020-03-31 16:43
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
一元二元就是操作数的个数
1+2
+运算符 左右各有1个操作数 这个叫做二元+运算符
-2
-运算符 只有右边1个操作数 这个叫做一元-运算符

同样
&n
只有右边1个操作数 叫做一元&运算符

之所以要强调是一元的原因你也说了
&符号同时还是位运算 不过 位运算 1&2 是一个二元运算符
强调是 一元& 就能排除掉&作为位运算的情况 特指&作为取指针运算符

https://zh.
2020-03-31 17:00
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
收藏
得分:0 
不可以
程序代码:
#include <iostream>
#include<vector>
using namespace std;
void arraynum()
{  vector <int>myarray{1,2,3,4};
myarray.resize(5);
cout<<&myarray[0]<<"  ";
cout<<&myarray[1]<<"  ";
cout<<&myarray[2]<<"  ";
cout<<&myarray[3]<<"  ";
cout<<&myarray[4]<<"  ";

}
int main()
{
    int num=4;
    cout<<&num<<"    ";
     int **p=&num;//这里报错
    auto tex1= p+1;
    auto tex2=p+2;
    auto tex3=p+3;
    cout<<tex1<<"  ";
    cout<<tex2;
    arraynum();
}


把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-03-31 17:55
快速回复:请问怎么理解二级指针和一级指针呢,新手求教
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.046419 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved