鱼C论坛

 找回密码
 立即注册
查看: 2919|回复: 10

指针问题求教

[复制链接]
发表于 2016-9-8 15:26:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
int * p1;
定义指针p1的时候,系统会给指针分配一个储存地址,那么这个地址不应该是固定的吗,为什么 “&p1”还算是非const指针呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-9-8 22:29:04 | 显示全部楼层
你这么定义一个p1,就在栈中定义了一个局部变量p1 (类型int *) ,他存储的是指向的变量的地址。至于&p1那就是变量在栈中的地址,我不懂你说的是什么意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-9 10:39:47 | 显示全部楼层
先不要管指针,你要知道这句代码就是定义了一个变量,那么这个变量被你定义出来就是局部变量啦,肯定是临时申请的内存啦,const个人感觉就和全局变量类似,但是它代表的是一直存在且不可变更的数据内存【希望没有误人子弟、、、】
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-9 15:22:57 | 显示全部楼层
no,no。定义的时候并没有实际分配空间的。所以为了避免野指针才要给指向呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-9 17:45:07 | 显示全部楼层
p作为指针在定义时已经在栈中分配了内存,但并没有说明指向了哪,p的地址和p所指向的内存都是可以更改的,那就是你说的非const指针了吧,我这样理解对吗?
如果是 int const*p,那么这个p指针就是不能更改的了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-10 13:47:57 | 显示全部楼层
本帖最后由 18813974736 于 2016-9-10 13:53 编辑

指针跟指针变量是两码事
概念性的问题吧

指针就是内存的地址,即指针就是地址,地址就是指针; 同时它也是一种数据类型
比如: char * 、  int * 、 char ** 、int ** 等等;

指针变量就是变量,通常我们都会把指针变量简称为指针

int *p;  //定义了一个 int * 型(指针中的一种)的指针变量 p;
例如这样没有给定已知指向的指针就是野指针;int *p = NULL 也是野指针

int *p;  跟 int a; 有什么区别吗? 除了类型不一样 没啥区别,只要你定义了变量;当代码执行到这句时就会给它分配一个内存空间;只不过我们定义的指针变量是用来存储我们需要指向的已知的内存地址才有意义。
例如:
int *p; int a;
a = 10;
p = 10;//没问题,野指针本身是可以赋值的,就像平时的变量一样;但是这样没有意义

但是
*p = 10;//这就会出错了,在使用指针时, 这个 * 代表操作指针变量p所指向的内存;而这里我们并没有给指针一个已知的指向,当我们操作它指向的内存就会出错。

例如这样才有意义:
p = &a;//指针变量p自己的内存就存储了 变量a的地址
*p = 100;//操作指针变量p所指向的内存(即变量a的内存)

指针存在的意义就是为了间接赋值(即要操作它指向的内存才有意义);而它所指向的内存又是要已知的才合法。



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-13 08:35:49 | 显示全部楼层
本帖最后由 sosoqq 于 2016-9-13 08:39 编辑

我学了一个星期 我也来说两句 int *p 的意思是 这个P就是一个用记录另一个有变量含数有地址,也就是说它是没有内容在里面的。它是让你来记灵另外的一个数的地址 在*P接受了另一个含数的地址后 系统就会把另一个的含数的值也放到了在这个*P 比如这样 include<stdio.h> 如果你要做&*P那么你就要在定义一个高级比*P高级的指针来取*P的地址
                                                         include<stdlib.h>
                                                          int **C,*p,A;
                                                                                                                           
                                                             void main()
                                                              {
                                                                      a=1;
                                                                       p=&a;  //&就是表示把A的地址放到了P//
                                                                        C=&P; //C又把P的地址记录了//
                                                                            PRINTF(“%D”,C);
                                                                              RETRUN 0;
                                                            }
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-25 09:33:27 | 显示全部楼层
Krant5 发表于 2016-9-8 22:29
你这么定义一个p1,就在栈中定义了一个局部变量p1 (类型int *) ,他存储的是指向的变量的地址。至于&p1那就 ...

现在回来看我当时问的,我自己也不知道什么意思。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-25 09:34:05 | 显示全部楼层
菜鸟dc 发表于 2016-9-9 10:39
先不要管指针,你要知道这句代码就是定义了一个变量,那么这个变量被你定义出来就是局部变量啦,肯定是临时 ...

谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-25 09:34:47 | 显示全部楼层
heblhc 发表于 2016-9-9 17:45
p作为指针在定义时已经在栈中分配了内存,但并没有说明指向了哪,p的地址和p所指向的内存都是可以更改的, ...

谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-26 03:14:17 | 显示全部楼层
我还以为是新帖子兴致勃勃的点进来看……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 18:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表