作者loveflcty (@@)
看板C_and_CPP
标题Re: [问题] 双指标
时间Wed Dec 2 01:41:20 2009
※ 引述《conan77420 (小马非马)》之铭言:
: 开发平台:Dev-c++ (version 4.9.9.2)
: 以下是练习到一半的部分程式
: int array[3][2]={{10,20},{15,25},{50,40}};
: int **ptr1=array; //我照书上打的,可是为什麽编译过不了?
: int *ptr2=&array[1][1];
: int (*ptr3)[2]=&array[2]; //想请问这样写跟 int *ptr3[2]=&array[2];有何不同?
: //不加括号编译过不了
: cout<<"ptr1:"<<ptr1<<endl; //因为ptr1的宣告有问题,
: //所以这些当然也看不到囧
: cout<<"*ptr1:"<<*ptr1<<endl;
: cout<<"**ptr1:"<<**ptr1<<endl;
: cout<<"ptr3:"<<ptr3<<endl;
: cout<<"*ptr3:"<<*ptr3<<endl;
: *(*ptr3+1)=array[2][1];
: cout<<"ptr3:"<<ptr3<<endl; //是我观念有问题吗?为什麽ptr3
: // 里面的东西都没变
: cout<<"*ptr3:"<<*ptr3<<endl;
: for(int i=0 ; i<3 ; i++)
: for(int j=0 ; j<2 ; j++)
: { cout<<array[i][j]<<endl;}
: =============================================
: 想法:1.ptr1用双指标宣告,给他阵列起始位址为什麽编译不过,我毫无想法囧
因为两者的type不同 ptr1是 int ** array是int (*)[2]
: 2.我知道int *ptr3[2] 是有两个指标,然後放在一起以array型式产生
: 但是加括号我就不知道是什麽意思了
int *ptr3[2] array of two pointers to int
int (*ptr3)[2] a pointer to an int array with two elements
: 3.ptr3值的部分,一开始就让他的指标指到&array[2],虽然实际的工作内容
: 我不清楚〈请大大指正我〉 但是值应该会有改变吧...
: 可是ptr3跟array中的值都没改变, 不知道为什麽,先猜是我判断方式写错
*ptr3+1 == &array[2][1] 这两个是一样的,所以*(*ptr3+1)=array[2][1]做完
之後有做等於没做
==============================================
改一下你原本的code 看是否会更了解一些
#include <iostream>
#include <cstdlib>
using namespace std;
int main(void)
{
int array[3][2]={{10,20},{15,25},{50,40}};
int *temp[3];
int **ptr1=(int **)temp;
for (int i = 0 ; i < 3 ; i++)
temp[i] = (int *)array + i * 2;
int *ptr2=&array[1][1];
int (*ptr3)[2]=&array[2];
cout<<"ptr1:"<<ptr1<<endl;
cout<<"*ptr1:"<<*ptr1<<endl;
cout<<"**ptr1:"<<**ptr1<<endl;
cout<<"ptr3:"<<ptr3<<endl;
cout<<"*ptr3:"<<*ptr3<<endl;
*(*ptr3+1)=array[2][1];
cout<<"ptr3:"<<ptr3<<endl;
cout<<"*ptr3:"<<*ptr3<<endl;
cout<<"**ptr3:"<<**ptr3<<endl;
for(int i=0 ; i<3 ; i++)
for(int j=0 ; j<2 ; j++)
{ cout<<array[i][j]<<endl;}
system("pause");
return 0;
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 58.115.9.50
※ 编辑: loveflcty 来自: 58.115.9.50 (12/02 01:41)
※ 编辑: loveflcty 来自: 58.115.9.50 (12/02 01:44)