首页 新闻 搜索 专区 学院

new的指针和一般指针

0
[已解决问题] 解决于 2014-01-24 10:04

new的指针可以直接赋值,不用先指向哪个变量;但是对于一般的指针(不用new定义的),只能在指针指向另一个变量后,才能赋值给*a,是这样的吗?

Neverland1995的主页 Neverland1995 | 初学一级 | 园豆:200
提问于:2014-01-22 11:57
< >
分享
最佳答案
2

不明白你说的。你最好写段代码来阐述你的问题,因为我个人猜测你把给指针赋值,和修改指针指向的对象(内存)的值搞混淆了。

奖励园豆:5
Launcher | 高人七级 |园豆:45045 | 2014-01-22 15:38
其他回答(3)
1

首先在C/C++里指针变量都是在栈上的吧,不用new的,你要new的是一个对象,然后这个指针变量指向这个new出来的对象爱那个

你应该是想说.直接定义一个指针变量a不new一个对象给他,然后你直接给*a赋值,这时候会发生异常.是这个意思吗?

吴瑞祥 | 园豆:28841 (高人七级) | 2014-01-22 16:39

int* a=new int; 

*a=1;
cout<<*a;                   //正确(new的指针可以直接赋值,不用先指向哪个变量;)
——————————————————————————————————————————————
int* b;
*b=1;
cout<<*b;                  //报错

 

int c;
int* b=&c;
*b=1;
cout<<*b;                //正确(但是对于一般的指针(不用new定义的),只能在指针指向另一个变量后,才能赋值给*a,是这样的吗?)

支持(0) 反对(0) Neverland1995 | 园豆:200 (初学一级) | 2014-01-23 10:31

@Neverland1995: 

可以看出来你对指针的概念不是很明确.

int* a 是声明和定义了一个指针变量a这个指针变量用来指向一个int类型的值

int a 是定义了一个int类型的变量.

正确的地方本来就是正确的,我给你讲下错的

int* b;
*b=1;
cout<<*b;                  //报错

错误并不是在第三句才发生,其实在第二句的时候已经发生错误了.而且是致命错误,

当int* b的时候,指针b会有一个值,这个值是未知的,但一般都是指向0,当你*b=1时会修改b指向的内存位置

但这个内存位置是未知的,也就说你把某个未知的内存空间给改了.这是非常非常危险的.

当然地3句报错是因为b指针的值有问题

支持(1) 反对(0) 吴瑞祥 | 园豆:28841 (高人七级) | 2014-01-23 13:54

@吴瑞祥: 

指针是指向一个内存空间,当这个空间正常时,才能给这个空间赋值

指针变量其实就是一个整型变量,整型的值对应内存中的一个位置.

支持(0) 反对(0) 吴瑞祥 | 园豆:28841 (高人七级) | 2014-01-23 14:00

@吴瑞祥: 谢谢,我明白了!再请教一个问题:那为什么字符串可以呢?

char *b;
b="aaaa";
cout<<b;

支持(0) 反对(0) Neverland1995 | 园豆:200 (初学一级) | 2014-01-23 22:28

@Neverland1995: 

你这是b=不是*b=

支持(0) 反对(0) 吴瑞祥 | 园豆:28841 (高人七级) | 2014-01-24 08:53

@吴瑞祥: 嗯嗯,谢谢!

支持(0) 反对(0) Neverland1995 | 园豆:200 (初学一级) | 2014-01-24 10:04
0

唉,用java或c#比较多,好多概念忘记了。。。

angelshelter | 园豆:9676 (大侠五级) | 2014-01-22 22:11
0

先给说下个基础吧。

1. 我们在使用内存时,必须先向内存申请使用空间。

2. 指针简单点说就是一个“存储某个内存空间的首地址的变量“。

所以你建一个指针,你没给他设置指向的内存地址,他也不知道指到哪里去,怎么对那部分内存进行操作?

普通变量本身就已经内存中申请了使用空间,所以指针指向他当然没问题,你通过指针给变量赋值时,实际上就是对那部分内存空间进行赋值。

那为什么new可以直接赋值?因为new这操作符在使用时,会在内存中申请一部分使用空间,之后返回那部分空间的首地址。这个返回的首地址就是个指针啊。

”char* b;“  这样的空指针,他都不知道指到到哪个内存空间,你怎么对 *b 进行赋值?

综上所述,你的问题是对的。

ps1:我在使用指针时,更喜欢把指针看成一个特殊的变量 ”char* b“ ,这样 不就是一个类型为 char* 的变量,这样理解指针好多了。

ps2:”char* b“这种写法是错的,当我们声明一个空指针时必须严格说明他是一个空指针,上面说了指针是”存储某个内存空间的首地址的变量“,如果我们没给 b 设置初始值,编译器是会随便给他一个值,这样我们就不知道他到底是指向哪个内存空间,使用时可能会超出我们的期望。所以定义一个空指针必须这样写:

  char* b = 0;

Ten_cnblogs | 园豆:21 (初学一级) | 2014-08-16 10:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册