指针问题求教
int * p1;定义指针p1的时候,系统会给指针分配一个储存地址,那么这个地址不应该是固定的吗,为什么 “&p1”还算是非const指针呢? 你这么定义一个p1,就在栈中定义了一个局部变量p1 (类型int *) ,他存储的是指向的变量的地址。至于&p1那就是变量在栈中的地址,我不懂你说的是什么意思 先不要管指针,你要知道这句代码就是定义了一个变量,那么这个变量被你定义出来就是局部变量啦,肯定是临时申请的内存啦,const个人感觉就和全局变量类似,但是它代表的是一直存在且不可变更的数据内存【希望没有误人子弟、、、】 no,no。定义的时候并没有实际分配空间的。所以为了避免野指针才要给指向呀 p作为指针在定义时已经在栈中分配了内存,但并没有说明指向了哪,p的地址和p所指向的内存都是可以更改的,那就是你说的非const指针了吧,我这样理解对吗?
如果是 int const*p,那么这个p指针就是不能更改的了 本帖最后由 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的内存)
指针存在的意义就是为了间接赋值(即要操作它指向的内存才有意义);而它所指向的内存又是要已知的才合法。
本帖最后由 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;
} Krant5 发表于 2016-9-8 22:29
你这么定义一个p1,就在栈中定义了一个局部变量p1 (类型int *) ,他存储的是指向的变量的地址。至于&p1那就 ...
现在回来看我当时问的,我自己也不知道什么意思。。。。{:10_277:} 菜鸟dc 发表于 2016-9-9 10:39
先不要管指针,你要知道这句代码就是定义了一个变量,那么这个变量被你定义出来就是局部变量啦,肯定是临时 ...
谢谢!{:10_281:} heblhc 发表于 2016-9-9 17:45
p作为指针在定义时已经在栈中分配了内存,但并没有说明指向了哪,p的地址和p所指向的内存都是可以更改的, ...
谢谢! 我还以为是新帖子兴致勃勃的点进来看……
页:
[1]