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

二级指针的问题

fdcumt 发布于 2011-11-26 12:38, 675 次点击
#include <iostream>
using namespace std;
int main()
{
    int **p;
    int *p1,*p2,*p3,*p4;
    int a[]={1,2,3,4};
    p1=&a[0];p2=&a[1];p3=&a[2];p4=&a[3];
    p=&p1;
    p[0]=p1;p[1]=p2;p[2]=p3;p[3]=p4;
    cout<<*p1<<' '<<*p2<<' '<<*p3<<' '<<*p4<<endl;
    cout<<p[0]<<' '<<p[1]<<' '<<p[2]<<' '<<p[3]<<endl;
    cout<<p<<endl;
    cout<<*(p[0])<<' '<<*(p[1])<<' '<<*(p[2])<<' '<<*(p[3])<<endl;
    return 0;
}
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
8 回复
#2
我是菜鸟C2011-11-28 08:26
指针给指针赋值好似有问题吧。。。
模糊中,同求楼下高人。。
#3
game96882011-11-28 21:22
正在学习中.解完这题对我很有帮助.
#include <iostream>
using namespace std;
int main()
{
    int **p[3];
    int *p1,*p2,*p3,*p4;
    int a[]={1,2,3,4};
    p1=&a[0];p2=&a[1];p3=&a[2];p4=&a[3];
   // p=&p1;
    p[0]=&p1;p[1]=&p2;p[2]=&p3;p[3]=&p4;
    cout<<*p1<<' '<<*p2<<' '<<*p3<<' '<<*p4<<endl;
    cout<<p1<<' '<<p2<<' '<<p3<<' '<<p4<<endl<<endl;
    cout<<p[0]<<' '<<p[1]<<' '<<p[2]<<' '<<p[3]<<endl;
    cout<<p<<endl<<endl;
    cout<<*p[0]<<' '<<*p[1]<<' '<<*p[2]<<' '<<*p[3]<<endl;
    cout<<**p[0]<<' '<<**p[1]<<' '<<**p[2]<<' '<<**p[3]<<endl;

    return 0;
}
#4
kuangdang1782011-11-28 23:19
貌似lz没把二级指针数组定义出来,
程序代码:
#include <iostream>
using namespace std;
int main()
{
    int **p[3];
    int *p1,*p2,*p3,*p4;
    int a[]={1,2,3,4};
    p1=&a[0];p2=&a[1];p3=&a[2];p4=&a[3];
    p[0]=&p1;
    p[0]=&p1;p[1]=&p2;p[2]=&p3;p[3]=&p4;
    cout<<*p1<<' '<<*p2<<' '<<*p3<<' '<<*p4<<endl;
    cout<<p[0]<<' '<<p[1]<<' '<<p[2]<<' '<<p[3]<<endl;
    cout<<p<<endl;
    cout<<*(p[0])<<' '<<*(p[1])<<' '<<*(p[2])<<' '<<*(p[3])<<endl;

 cout<<**p[0]<<' '<<**p[1]<<' '<<**p[2]<<' '<<**p[3]<<endl;
    return 0;
} 还有就是二级指针指向一概是p1,p2等的地址
#5
感冒九十九2011-11-30 13:07
输出流中单引号要改为双引号二级指针定义为数组
#6
BianChengNan2011-11-30 17:12
以下是引用fdcumt在2011-11-26 12:38:11的发言:

#include
using namespace std;
int main()
{
    int **p;
    int *p1,*p2,*p3,*p4;
    int a[]={1,2,3,4};
    p1=&a[0];p2=&a[1];p3=&a[2];p4=&a[3];
    p=&p1;
    p[0]=p1;p[1]=p2;p[2]=p3;p[3]=p4;
    cout<<*p1<<' '<<*p2<<' '<<*p3<<' '<<*p4<
关键是楼主想干什么
#7
youlishen2011-11-30 17:38
楼主,要定义连续的数组才能用指针像你那样的访问,比如:int *p1,*p2,*p3,*p4;定义成int *p1[4];然后再int **p=&p1[0];
那么就可以p[0],p[1],p[2],p[3]这种访问了
四楼操作也很好,不过貌似是int **p[4]才行
#8
共和国鹰派2011-12-01 14:15
如果要使用p[0]=p1;p[1]=p2;p[2]=p3;p[3]=p4;应该需要分配空间,p=new int*[4];这样p对应的是一个指向指针数组的指针,而&p1是一个指向指针的指针两者不匹配所以可能这里出错了,把这句去掉就可以了
#9
共和国鹰派2011-12-01 14:16
可以看一下《C陷阱与缺陷》里面有详细的解释
1