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

不可以
#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=#//这里报错
    auto tex1= p+1;
    auto tex2=p+2;
    auto tex3=p+3;
    cout<<tex1<<"  ";
    cout<<tex2;
    arraynum();
}

全部加一个*
你对全部有什么误解
既然 p 你加了 *
num也得加*

https://zh.
2020-03-31 18:03
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
收藏
得分:0 
     int **p=&*num;
这样?
int **p=&**num;这样?哪样?

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-03-31 18:10
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
#include <iostream>
using namespace std;
int main()
{
    int* num;
    int** p=&num;
}
int ** p=&num;
p是指向一个int*类型的指针,p里装的是num的指针,num通过取地址符,返回一个带有值地址的指针,p接收num的地址

https://zh.
2020-03-31 18:13
你们都要疼我哦
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:火星
等 级:贵宾
威 望:49
帖 子:1296
专家分:2746
注 册:2008-7-13
收藏
得分:4 
  指针的问题还是很重要的,记得数据结构里要大量用到。
另外,要深刻理解指针,必定绕不开地址。本身C和C++就靠底层。尤其
是C,不谈地址光讲指针,纯属臆想。

小妹,哥哥看你骨骼清奇,绝非凡人,将来必成大业,不如这样,你先把裤裤脱了,待哥哥为你开启灵窍,然后我们一起努力钻研如何
2020-03-31 18:20
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
回复 24楼 你们都要疼我哦
指针用得足够多 就能明白 地址根本无关紧要

https://zh.
2020-03-31 18:27
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:4 
我肯定是落伍了,不和现在的小年轻在一个次元。
以我低次元的理解:一开始讨论就偏航了,一个问二级指针的问题怎么就和类扯上关系了?要知道,c在用二级指针里鼓捣来鼓捣去时,面向对象的类还没出现呢。
我觉得:1,不管几级指针,你把它当做一个变量就可以了,只是这个变量值是一个内存地址值,不是你们通常理解的用于四则运算的数(其实也是一个数)
        2,*运算符作为单目(好像是你们讨论中所说的一元二元,我落伍了,我只有单目、双目、三目运算符的概念,今天学习了)运算符时就是取出该变量的值,再把该值作为地址,取出该值指向的内存变量值,通俗地说就是间址寻址,有两个*号就间址寻址两次,有n个就n次。
        3,指针类型是针对编译器的,根据类型编译器决定在指针运算时移动的尺寸,在汇编语言里,指针是没有这个概念的,你inc bp(相当于p++)一次,这个指针寄存器的值就只加一。
        4,好多教科书把二级指针对应为二维数组,这让我在实际写代码时迷茫了一会,实际上你根本不能像一维数组那样把二维数组的首地址传给一个二维指针,除非你是用*p[]的方式定义的。
        5,我最早会写代码,只会汇编、basic,教科书有fortran,都是一些上古语言。14年才开始决心学会写c代码,那时我就觉得c和汇编最相近,并且指针就是对应汇编里的间址寻址,所以自觉理解指针不难(今天看了各位的讨论,才知道我对指针完全没有理解)。实际上,随着编程语言越来越高级,指针已经不再是写代码所必须掌握的了。
        6,我以上的理解肯定是错误的,以其他大神的说法为准,只希望楼主不要走我错误路线。

能编个毛线衣吗?
2020-03-31 18:34
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
以下是引用wmf2014在2020-3-31 18:34:23的发言:

我肯定是落伍了,不和现在的小年轻在一个次元。
以我低次元的理解:一开始讨论就偏航了,一个问二级指针的问题怎么就和类扯上关系了?要知道,c在用二级指针里鼓捣来鼓捣去时,面向对象的类还没出现呢。
我觉得:1,不管几级指针,你把它当做一个变量就可以了,只是这个变量值是一个内存地址值,不是你们通常理解的用于四则运算的数(其实也是一个数)
        2,*运算符作为单目(好像是你们讨论中所说的一元二元,我落伍了,我只有单目、双目、三目运算符的概念,今天学习了)运算符时就是取出该变量的值,再把该值作为地址,取出该值指向的内存变量值,通俗地说就是间址寻址,有两个*号就间址寻址两次,有n个就n次。
        3,指针类型是针对编译器的,根据类型编译器决定在指针运算时移动的尺寸,在汇编语言里,指针是没有这个概念的,你inc bp(相当于p++)一次,这个指针寄存器的值就只加一。
        4,好多教科书把二级指针对应为二维数组,这让我在实际写代码时迷茫了一会,实际上你根本不能像一维数组那样把二维数组的首地址传给一个二维指针,除非你是用*p[]的方式定义的。
        5,我最早会写代码,只会汇编、basic,教科书有fortran,都是一些上古语言。14年才开始决心学会写c代码,那时我就觉得c和汇编最相近,并且指针就是对应汇编里的间址寻址,所以自觉理解指针不难(今天看了各位的讨论,才知道我对指针完全没有理解)。实际上,随着编程语言越来越高级,指针已经不再是写代码所必须掌握的了。
        6,我以上的理解肯定是错误的,以其他大神的说法为准,只希望楼主不要走我错误路线。

本来就没有一个人谈到类 这里回帖你是第一个提到类的人了
指针完整概念应该理解为类型 基于某个完整类型的派生类型
为什么不能理解为变量呢 举个例子 (void*)0是指针表达式 却不是变量
一元二元
一目二目这个只是同义词 一个意思
百度一下一目运算符和一元运算符 找到的内容是一样的
喜欢用哪个词就用那个 无所谓

纠正 突然想起来 不完整类型也可以派生指针
基于某个完整类型的派生类型 一句话说错
应该是继续某个类型的派生类型

比较有意义的是 因为派生类型本身也是一个类型
所以这个概念是递归的
基于int 派生int*类型
基于int* 派生int**类型
可以继续下去
限制派生层次的只有编译器实现了 233

[此贴子已经被作者于2020-3-31 20:09编辑过]


https://zh.
2020-03-31 18:52
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 27楼 lin5161678
我说过我可能在另外一个时空,有理解障碍。
理解对象指针就可以了 不用特意区分一级二级理解对象指针只需要注意2个方面”,这是你在二楼的原话,我肯定理解错了,我的理解是:理解对象指针就可以了 不用特意区分一级二级...,我就觉得:对象不是类里的术语吗,所以就误以为你们在谈类了。见笑了。

对了,派生也是类里的概念,我觉得,你谈到这些术语时,如果不是原意思,就特别指出下,我脑子转不赢,爱混淆。

[此贴子已经被作者于2020-3-31 19:04编辑过]


能编个毛线衣吗?
2020-03-31 19:01
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
以下是引用wmf2014在2020-3-31 19:01:03的发言:

我说过我可能在另外一个时空,有理解障碍。
“理解对象指针就可以了 不用特意区分一级二级理解对象指针只需要注意2个方面”,这是你在二楼的原话,我肯定理解错了,我的理解是:理解对象,指针就可以了 不用特意区分一级二级...,我就觉得:对象不是类里的术语吗,所以就误以为你们在谈类了。见笑了。

答对了 你的确理解错了
你从断句开始就理解错
我说的是 对象指针 这是一个完整的词
理解 对象指针 就可以了 不用特意区分一级二级

https://zh.
2020-03-31 19:03
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
回复 28楼 wmf2014
至于什么是 对象指针 我在5楼的回复中也做了解释
指针分2种 对象指针和函数指针

https://zh.
2020-03-31 19:05
快速回复:请问怎么理解二级指针和一级指针呢,新手求教
数据加载中...
 
   



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

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