※ 引述《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)