已知it是一个const指针,那么&it和it有什么区别呢?

已知it是一个const指针,那么&it和it有什么区别呢?,第1张

我们都知道:C语言中的数组是指 一类 类型,数组具体区分为 int 类型数组,double类型数组,char数组 等等。同样指针 这个概念也泛指 一类

数据类型,int指针类型,double指针类型,char指针类型等等。

通常,我们用int类型保存一些整型的数据,如 int num = 97 , 我们也会用char来存储字符: char ch = 'a'。

我们也必须知道:任何程序数据载入内存后,在内存都有他们的地址,这就是指针。而为了保存一个数据在内存中的地址,我们就需要指针变量

因此:指针是程序数据在内存中的地址,而指针变量是用来保存这些地址的变量。

表示成员选择(指针),选择结构体的成员变量。

1、结构:运算符 -> 是指向结构体成员运算符,结合方向为自左向右。

2、用法:对象指针->成员名。

举例说明如下:

扩展资料:

C语言指针的必要性。

指针解决了一些编程中基本的问题:

1、指针的使用使得不同区域的代码可以轻易的共享内存数据。当然也可以通过数据的复制达到相同的效果,但是这样往往效率不太好,因为诸如结构体等大型数据,占用的字节数多,复制很消耗性能。

但使用指针就可以很好的避免这个问题,因为任何类型的指针占用的字节数都是一样的(根据平台不同,有4字节或者8字节或者其他可能)。

2、指针使得一些复杂的链接性的数据结构的构建成为可能,比如链表,链式二叉树等等。

3、有些 *** 作必须使用指针。如 *** 作申请的堆内存。还有:C语言中的一切函数调用中,值传递都是“按值传递”的,如果要在函数中修改被传递过来的对象,就必须通过这个对象的指针来完成。

参考资料:

百度百科--指针

Points::const_iterator是一个迭代器类型,其不保证一定是一个 const Points 类型(由于我们可以重载-> *** 作符),而一旦我们it之后,会调用其 运算符函数,这个函数保证一定会返回const Point& 类型的数据,接着&就一定是const Point的类型了。

问题一:C语言中,指针中的是什么意思 在声明int piRand中

表示这个变量是int类型的指针

在声明之外

可以理解成一个运算符 或者一个函数

和&是一对逆运算

&的意思是读一个变量的地址

比如你声明了int a;&a是a的地址可能是xx1001之类的

可以在调试里看一下

的意思是读一个地址指向的内容

&piRand==piRand

rand是一个地址

rand是指向这个地址的地址

所以程序出错了

piRand[i]=rand(); 的意思是把rand的地址赋值给piRand[i]

问题二:C++的指针是什么意思 指针,非常重要,去看书吧,这里先简单说一下。

执行数据在内存里存储着,每一字节数据都有一个序列号,叫做地址,指针就是存这些地址的。指针的 *** 作就是地址的 *** 作,通过地址来访问、处理数据要比顺序处理要好得多。

注:试想如果你可以在内存中自由穿梭,你可以做多少事。。。

问题三:什么是指针? 指针就是一个存放地址的变量

当指针指向某个变量

这时这个指针里就存放了那个变量的地址

同时可以利用指针直接取变量中的值用 只要在指针前加 就是取其

真值了(也就是被指向的变量的值)

举个例子

int i=0,p;

声明了一个 int 类型的 变量i和指针p

假设i在内存中所存在的地址为aaaaa(随便写的)

p->i 就是使指针p指向i

也就是说 指针p中存放了aaaaa这个地址

当你 *** 作这个p时就是直接 *** 作了aaaaa这个地址中存放的东西

间接 *** 作了变量i,

这就是指针的作用

问题四:C语言指针p是什么意思 它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针

所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让我们分别说明。

先声明几个指针放着做例子:

例一:

(1)int ptr;

(2)char ptr;

(3)int ptr;

(4)int (ptr)[3];

(5)int (ptr)[4];

如果看不懂后几个例子的话,请参阅我前段时间贴出的文章 >。

1。 指针的类型。

从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。这是指针本身所具有的类型。让我们看看例一

中各个指针的类型:

(1)int ptr; 指针的类型是int

(2)char ptr; 指针的类型是char

(3)int ptr; 指针的类型是 int

(4)int (ptr)[3]; 指针的类型是 int()[3]

(5)int (ptr)[4]; 指针的类型是 int ()[4]

怎么样?找出指针的类型的方法是不是很简单?

2。指针所指向的类型。

当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当做什么来看待。

从语法上看,你只须把指针声明语句中的指针名字和名字左边的指针声明符去掉,剩下的就是指针所指向的类型。例如:

(1)int ptr; 指针所指向的类型是int

(2)char ptr; 指针所指向的的类型是char

(3)int ptr; 指针所指向的的类型是 int

(4)int (ptr)[3]; 指针所指向的的类型是 int()[3]

(5)int (ptr)[4]; 指针所指向的的类型是 int ()[4]

在指针的算术运算中,指针所指向的类型有很大的作用。

指针的类型(即指针本身的类型)和指针所指向的类型是两个概念。当你对C越来越熟悉时,你会发现,把与指针搅和在一起的“类型”这个概念

分成“指针的类型”和“指针所指向的类型”两个概念,是精通指针的关键点之一。我看了不少书,发现有些写得差的书中,就把指针的这两

个概念搅在一起了,所以看起书来前后矛盾,越看越糊涂。

3。 指针的值,或者叫指针所指向的内存区或地址。

指针的值是指针本身存储的数值,这个值将被编译器当作一个地址,而不是一个一般的数值。在32位程序里,所有类型的指针的值都是一个32

位整数,因为32位程序里内存地址全都是32位长。

指针所指向的内存区就是从指针的值所代表的那个内存地址开始,长度为sizeof(指针所指向的类型)的一片内存区。以后,我们说一个指针的

值是XX,就相当于说该指针指向了以XX为首地址的一片内存区域;我们说一个指针指向了某块内存区域,就相当于说该指针的值是这块内存区

域的首地址。

指针所指向的内存区和指针所指向的类型是两个完全不同的概念。在例一中,指针所指向的类型已经有了,但由于指针还未初始化,所以它所

指向的内存区是不存在的,或者说是无意义的。

以后,每遇到一个指针,都应该问问:这个指针的类型是什么?指针指向的类型是什么?该>>

问题五:指针地址是什么意思 在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。因此,将地址形象化的称为“指针”。意思是通过它能找到以它为地址的内存单元。[1] 在高级语言中,指针有效地取代了在低级语言,如汇编语言与机器码,直接使用通用暂存器的地方,但它可能只适用于合法地址之中。指针参考了存储器中

某个地址,通过被称为反参考指针的动作,可以取出在那个地址中存储的值。作个比喻,假设将电脑存储器当成一本书,一张内容记录了某个页码加上行号的便利

贴,可以被当成是一个指向特定页面的指针;根据便利粘贴面的页码与行号,翻到那个页面,把那个页面的那一行文字读出来,就相当于是对这个指针进行反参考的

动作。[2]

在信息工程中指针是一个用来指示一个内存地址的计算机语言的变量或中央处理器(CPU)中寄存器(Register)用来指向该内存地址所对应的变量或数组。指针一般出现在比较接近机器语言的语言,如汇编语言或C语言。面向对象的语言如Java一般避免用指针。指针一般指向一个函数或一个变量。在使用一个指针时,一个程序既可以直接使用这个指针所储存的内存地址,又可以使用这个地址里储存的函数的值。

问题六:指针等于指针是什么意思 5分 让指针p1指向指针p所指向的地址。

也就是说用p的值,覆盖p1的值。

在你的那段代码里,因为p没有被初始化,所以p1=p的 *** 作是不安全的。如果接下来的 *** 作,直接使用了p1,会导致内存错误。

这段代码执行完毕后,p2指向p所指向的地址。而p没有被初始化,所以p2里的值也是不确定、无意义的。

问题七:C语言中指向指针的指针是什么意思 #includeint main(void){int a;int p;int fp;a = 1;p = &a;fp = &p;printf(%d\n, a);printf(%d\n, p);printf(%d\n, fp);return 0;}

看图说话把(可以把另存为桌面再打开会清晰点) 上面的程序输出的结果都是1

指针其实也是个变量(只要是变量就一定有相应的内存空间) 只是这个变量比较的特殊

它只能存放别的变量的地址 变量时在内存中是有地址的

你要明确两概念:变量值和变量地址

变量值:是变量本身的内容

变量地址:是该变量在内存中的位置编号

程序中的第5行就是声明了一个指向指针变量的变量,什么意思?

通俗来讲就是说这个变量fp只能接受一个指针变量的地址所以你看第8行在p前面加了一个’&‘取地址符号 也就是说把p这个变量的地址给了fp了fp的内容就是p的地址

接下来9行输出了a的值这个直接通过变量名a就能找到该变量的地址并且直接输出了a的值1

第10行你会发现输出列表参数里面是p是什么意思?其中的“”在这里表示指针运算符, 就是说以p的内容为地址找到该地址里面的值 p里面不是村的a变量的地址吗不是吗? 你看第7行是不是在a变量前面加了“&”取地址运算符了 所以p就是1

第11行fp 这里出现了2个‘’号 别急 由于指针运算符的结合方向为“自右至左”所以fp先运算那么fp是什么就是一fp的内容为地址找到的变量的值是什么 fp里面存放着p的地址 显然此时fp最终变成了p这个变量的地址了

(p变量的地址) 到了这一步就是说以p的内容为地址找到对应的变量了 显然是a这个变量了

你慢慢理解吧。说的有点繁琐了

第11就是你说的指向指针的指针了。

问题八:一个指针p有代表什么意思p代表的是地址吗 看你怎么定义变量的,如果定义的时候是p,那么p就是一个地址,表示指针,p表示指针指向p存储地址中所对应的具体值(即:具体值),

如:

int p = 1;那么p所对应的地址内存中存放的值就是1,代码中的p表示1,p表示1所在的存储地址。

&符号表示获取对应值的存储地址(并不是具体值,而是存储地址),

如:

int x = 9; int p = &x;这句代码可以分为两句: int p; p=&x;x表示9,&x表示9的地址,代码中的p表示9,单独p表示9的地址

如:

int x=9; int p=&x; 这句代码可以分为两句: int p; p=&x;int a=&p;这句代码也可以拆分: int a; a=&p;x表示9,&x表示9的地址,代码中的p表示9,&p表示9的地址的地址,代码中的a表示9,a表示9的地址的地址

其实与其你在这里问,还不如看一看c语言教科书,上面写的都很详细

以下是谭浩强版的

在计算机中,所有的数据都是存放在存储器中的。一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等,在前面已有详细的介绍。为了正确地访问这些内存单元,必须为每个内存单元编上号。根据一个内存单元的编号即可准确地找到该内存单元。内存单元的编号也叫做地址。

既然根据内存单元的编号或地址就可以找到所需的内存单元,所以通常也把这个地址称为指针。

内存单元的指针和内存单元的内容是两个不同的概念。

可以用一个通俗的例子来说明它们之间的关系。我们到银行去存取款时,

银行工作人员将根据我们的帐号去找我们的存款单,

找到之后在存单上写入存款、取款的金额。在这里,帐号就是存单的指针,

存款数是存单的内容。对于一个内存单元来说,单元的地址即为指针,其中存放的数据才是该单元的内容。在C语言中,允许用一个变量来存放指针,这种变量称为指针变量。因此,一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针。

严格地说,一个指针是一个地址,是一个常量。而一个指针变量却可以被赋予不同的指针值,是变量。但常把指针变量简称为指针。为了避免混淆,我们中约定:“指针”是指地址,是常量,“指针变量”是指取值为地址的变量。定义指针的目的是为了通过指针去访问内存单元。

既然指针变量的值是一个地址,那么这个地址不仅可以是变量的地址,也可以是其它数据结构的地址。在一个指针变量中存放一个数组或一个函数的首地址有何意义呢?

因为数组或函数都是连续存放的。通过访问指针变量取得了数组或函数的首地址,也就找到了该数组或函数。这样一来,凡是出现数组,函数的地方都可以用一个指针变量来表示,只要该指针变量中赋予数组或函数的首地址即可。这样做,将会使程序的概念十分清楚,程序本身也精练,高效。在C语言中,一种数据类型或数据结构往往都占有一组连续的内存单元。

用“地址”这个概念并不能很好地描述一种数据类型或数据结构,而“指针”虽然实际上也是一个地址,但它却是一个数据结构的首地址,它是“指向”一个数据结构的,因而概念更为清楚,表示更为明确。

这也是引入“指针”概念的一个重要原因。

cpu自己有运算器和寄存器,通过总线与存储器件相连,在执行运算时,

需要将数据冲存储器件上面将参与运算的数据读入,运算完成后再送出到

存储区。那么cpu读入时需要访问存储器件的某个单元,需要指定这个单元

的编号,我们管这个编号叫存储地址。

比如:int a[10],p; p=&a[3];a就是一个拥有10个整型数据的数据区

的首地址,变量p是存放地址的,称为指针型变量,赋值时需要取相应存储

区的地址,p=&a[3];就是取数组a的第4个单元的地址给p,那么p就拿到了

这个单元的地址,p=5;就相当于a[3]=5;的 *** 作,p++;后p指针就指向a[4]。

在 *** 作大块数据时,一般记录首地址(数组指针),然后根据首地址再加

上偏移量来访问整个数据,在你程序中写a[3]时,计算机就会取a数组对应

的首地址再加3个整型偏移量来访问相应数据。用指针p访问a数组的好处

是,不用每次计算a加多少偏移访问数据,而是使p指向某数据后可以p++

或p--来访问前一个或后一个数据。

注意:

1指针存放地址用,不是存储实际数据的,它是用来找数的,在

程序中要注意这点,往往出问题的是,指针还没有赋值就用来 *** 作,或

用指针来存放数据,如:int p=15,s[10]={ 0,15,{0} };的

p指针赋值有问题,这样计算机会把15当成地址存放到p变量中,以后用

p访问得到的数据就不是你想要的数据了。(应该类似:p=s+1; p=15;)

2指针访问数据区一般需要程序来控制不要越界,比如定义了10个单元

的数据区,你不能让指针超出这10个单元的范围,否则得到的数据就是

不靠谱的。

3指针的定义只是开设了可以访问数据区或数组的变量,数据区和数组

需要你的程序另行开设,然后把数据区或数组的某个单元的地址赋值给

指针变量,不要认定义了能访问数组的指针,数组就定义好了。

4指针存放的地址最好不要用来与其他地址比较,除非你能确认地址比

较的结果肯定是你想要的。

5举例来说,int a[10],p=a;中a和p都是指针(地址),但a和p是不同的

在编译器眼中,a是一个数据区的首地址,是一个标记,你程序中使用a

时,编译器会知道用数据区的首地址来替换 *** 作,而p是你自己程序开

设的变量,可以在程序中 *** 作比如p++; p=a;等,但作为记号的a就不能

在程序中 *** 作了,如a++; a=p;就是错的了。

6子程序如果参数是指针型的,这个参数由子程序开设的指针型临时

变量存储,这个临时变量可以进行 *** 作,但不会返回给调用者的指针型

变量。

如:int a[10],p; int f(int s) { s++; } main() { p=a; f(p); }

s再怎么加减都不会影响p。

指针本质上是地址,可以是变量、常量、函数的地址等。通过地址就能找到相应的变量等。这是C语言灵活性的重大体现。

指针的指针也是指针,但它指向的是一个指针变量(这个变量本身就是一个指针,这个指针可能指向别的变量、常量、函数等)。

指针的指针是指针的一种,是一个特别的指针;

指针和指针的指针是包含的关系;

以上就是关于C语言中指针是什么全部的内容,包括:C语言中指针是什么、C语言中的指针是什么意思、已知it是一个const指针,那么&*it和it有什么区别呢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/8854919.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-22
下一篇 2023-04-22

发表评论

登录后才能评论

评论列表(0条)

保存