注册 登录
编程论坛 C++教室

有关指针的问题

九天冥盟 发布于 2016-05-15 00:50, 3580 次点击
#include <iostream>
using namespace std;


int main()
{
    int *data,a[10];                   //声明一个指针,和数组a
    for(int i=0; i<10; i++)
         cin>>a[i];
    cout<<"input  out!"<<endl;
  
   for(int i=0; i<10; i++)            //将数组中的数据赋予指针;
       *(data+i)=a[i];  
   for(int i=0; i<10; i++)
       cout<<*(data+i)<<"\t";                    
    return  0;   
为什么不可以这样?拷贝构造函数中就有这样的语句,
7 回复
#2
rjsp2016-05-15 09:13
data是个野指针
#3
yangfrancis2016-05-15 11:46
data=&(a[i]);
for(i=1;i<10;i++)
  *(data+i)=a[i];

//试一下看这样行不行
#4
wengbin2016-05-15 14:13
原码中第二个注释错了,值怎么能给地址呢?就算编译器不报错,也不要这么做,而且原码的意思也不是注释的意思,是将值存入指向的内存块。rjsp版主已经说了那指针是野指针。你这个题目可能是想说明指针的作用的,主要是说明data+1偏移量的问题。data是int型指针,所以data+i是向后偏4i个字节,你这里要改,最好是new出一块内存,其他什么都不用变,应该就可以了,就是在循环前加一句data=new int [sizeof(int)*10];return之前记得释放内存就好了
#5
wengbin2016-05-15 14:16
不是4i,是8i,int应该是8位的
#6
wengbin2016-05-15 14:16
不是4i,是8i,int应该是8位的
#7
weidelong2016-05-15 15:00
1.data使用前没有new分配
2.*(data+i)不用考虑sizeof(int)的问题
#8
wengbin2016-05-15 15:07
哦,对,搞混了,new 10个int型长度的内存块就够了
1