指針的簡單應用(三) 之指針與數組續

/*
 *數組、指針、數組指針、指針數組的問題
 */
#include <iostream>
using namespace std;

int main()
{
/*arr是數組,有5 個元素,每個元素的類型是int*(地址類型),
  每個元素是指針變量,存放的是地址(即指針),即:指針數組*/
int* arr[5]; 
//p是一個指針,指向有5 個元素的int數組(指向的是整個數組,而不是其中的某一數組元素)
int (*p)[5];  
int ar[5] = {11,16,34};

/*for(int i = 0; i != 5; i++)
cout << "int* arr[5]中的元素:" << arr[i] << endl;
for(int* r = ar; r != ar+5; r++)
cout << *r << ' ';
cout << endl;*/

//***cannot convert ‘int [5]’ to ‘int (*)[5]’ in assignment;類型不一致
//p = ar;  //且數組名錶示的是數組ar[0]首元素的地址

p = &ar;  //對數組名取地址,表示的是整個數組ar的起始地址
/*for(int i = 0; i != 5; i++)
cout << *(*p+i) << ' '; //(*p)[i] << ' ';
cout << endl;*/

//cout << " p = " << sizeof(p) << endl;
//cout << "*p = " << sizeof(*p) << endl;
//cout << "ar = " << sizeof(ar) << endl;

//如果對eg:int (*)[] 這種指向數組的指針,直接初始化,並且輸出的話,會出現下面的問題
//***scalar object ‘q’ requires one element in initializer
//(標量對象在初始化時需要一個元素)
int (*q)[4];// = {1,23,5,68,12,34};

//***cannot convert ‘int (*)[5]’ to ‘int (*)[6]’ in assignment
//q = &ar;

/*for(int i = 0; i != 6; i++)
cout << (*q)[i] << ' ';
cout << endl;*/

int arry[3][4] = {{1,2,3},{4,5},{6}};
q = arry;

//***cannot convert ‘int (*)[3][4]’ to ‘int (*)[4]’ in assignment
//q = &arry;  

//cout << sizeof(arry)/sizeof(arry[0]) << endl;
/*for(int i = 0; i != 3; i++)
{
cout << arry[i] << ' ' << endl;  //<< sizeof(arry[i]) << endl;
}
for(; q != arry+3; q++)
{
for(int j = 0; j != 4; j++)
{
cout << *(*q+j) << ' ';
}
cout << endl;
}*/

//for(; q != arry+3; q++)
//cout << q <<endl;

//for(; q != arry+3; q++)

//cout << *q <<endl;

/*for(int i = 0; i != 3; i++)

{
for(int j = 0; j != 4; j++)
{
cout << *(*(q+i)+j) << ' ';  //q[i][j] <<' ';
}
cout << endl;
}*/
return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章