+ -
当前位置:首页 → 问答吧 → 求教关于C++指针的一个问题

求教关于C++指针的一个问题

时间:2011-12-02

来源:互联网

C/C++ code
#include <iostream>
using namespace std;
class A
{
public:
    void abc(int *p,int *q)
    {
          *p=1;//这里能赋值
          *q=2;//这里能赋值
        cout<<*p<<"     "<<*q<<endl;
    }

};
void main() 
{
    int a=7;
    int *b=&a;
    int *v;
         *v=7;//为什么这里不能赋值
    int c=8;
    int *d=&c;
    A g;
    g.abc(b,d);
    cout<<*b<<"     "<<*d<<endl;
} 


想问一下为什么在函数里面的指针能赋值,而在主程序里的指针不能赋值

作者: yugijiudai   发布时间: 2011-12-02

C/C++ code

#include <iostream>
using namespace std;
class A
{
public:
    void abc(int *p,int *q)
    {
          *p=1;//这里能赋值
          *q=2;//这里能赋值
        cout<<*p<<"     "<<*q<<endl;
    }

};
void main() 
{
    int a=7;
    int *b=&a;
    int *v = new int;//因为你只定义了指针,未分配内存,分配了内存就能赋值了
         *v=7;//为什么这里不能赋值
    int c=8;
    int *d=&c;
    A g;
    g.abc(b,d);//函数能赋值是因为这里的b,d参数都已经申请了内存
    cout<<*b<<"     "<<*d<<endl;
} 

作者: et214721856   发布时间: 2011-12-02

v 是野指针,没有分配内存空间,直接赋值会导致段错误。而 p、q 不是,分别指向变量 a、c,所以可以操作。

你在代码最后一行加上:cout<<a<<" "<<c<<endl; 就能看到 a、c 因为 p、q 的更改而更改了。

作者: SegmentFault   发布时间: 2011-12-02

*v=7;//为什么这里不能赋值
没有申请内存,当然不能赋值了

g.abc(b,d);
b和d都指向了一个内存,当然可以了

作者: ouyh12345   发布时间: 2011-12-02

想问一下为什么在函数里面的指针能赋值,而在主程序里的指针不能赋值

并不是所有的参数,都是有效的

作者: ouyh12345   发布时间: 2011-12-02

该回复于2011-12-02 17:10:32被管理员删除

  • 对我有用[0]
  • 丢个板砖[0]
  • 引用
  • 举报
  • 管理
  • TOP
#6楼 得分:0回复于:2011-12-02 17:14:01
2楼正解,推荐你去看《高质量C++编程指南》

作者: a130098300   发布时间: 2011-12-02

TOP 2楼

作者: lwei3600103   发布时间: 2011-12-02

引用 2 楼 segmentfault 的回复:
v 是野指针,没有分配内存空间,直接赋值会导致段错误。而 p、q 不是,分别指向变量 a、c,所以可以操作。

你在代码最后一行加上:cout<<a<<" "<<c<<endl; 就能看到 a、c 因为 p、q 的更改而更改了。


正解

作者: langyano1   发布时间: 2011-12-02

学习了,顶

作者: wang7535067   发布时间: 2011-12-02