關於數組指針的問題:


int a=[1, 2, 3];   //定義數組
int (*p)[3];       //定義指向整型數組的指針
int *ptr;          //定義指針

p = a;             //指向數組a
ptr = a;           //指向數組a  這個和p=a有什么區別??

cout<<*(*p+2)<<endl;  
cout<<*(ptr+2)<<endl;    //這兩句都是輸出3,代碼里區別是怎么產生的呢?

謝謝大家了

20 个解决方案

#1


int a=[1, 2, 3];   //定義數組
int (*p)[3];       //定義指向整型數組的指針
int *ptr;          //定義指針

p = a;             //指向數組a
ptr = a;           //指向數組a  這個和p=a有什么區別??
=====================================================
都是可指想數組的。
但是因為指針類型不一樣,所以指針內的數據組織格式不一樣。(但數據都一樣)

#2


int a[]={1, 2, 3};   //定義數組
    int (*p)[3];       //定義指向整型數組的指針
    int *ptr;          //定義指針
    
    p = &a;             //指向數組a
    ptr = a;           //指向數組a  這個和p=a有什么區別??
    
    cout<<*(*p+2)<<endl;  
    cout<<*(ptr+2)<<endl;    //這兩句都是輸出3,代碼里區別是怎么產生的呢?

#3


cout<<*(*p+2)<<endl;  
cout<<*(ptr+2)<<endl;    //這兩句都是輸出3,代碼里區別是怎么產生的呢?
========================================================
因為數據組織的格式不一樣,所以訪問的方式不一樣。

#4


cout<<*(*p+2)<<endl;  
cout<<*(ptr+2)<<endl;    //這兩句都是輸出3,代碼里區別是怎么產生的呢?
========================================================
因為數據組織的格式不一樣,所以訪問的方式不一樣。

========================================================
兄弟,具體是什么區別呢?*p對於ptr來說可是又取了一次值啊

#5


int (*p)[3];       //定義指向整型數組的指針
表示p是一個指針變量,指向一個包含3個整型元素的一維數組
ptr = a;           //指向數組a 
表示p指向數組a的地址
在這段代碼中是一個意思

#6


表示p指向數組a的地址
在這段代碼中是一個意思
========================================
那為什么之后的語句要得出相同的結果,表現形式卻差了一個*:
cout<<*(*p+2)<<endl;  
cout<<*(ptr+2)<<endl;

#7


cout<<*(*p+2)<<endl;  
改為
cout<<*(*p+10)<<endl;  
看看結果是什么
我沒編譯器
估計是11

#8



估計錯了

#9


結果是多少啊?

#10


cout<<*(*p+2)<<endl;  
cout<<*(ptr+2)<<endl;
====================
第一個是先取到數組的地址,因為是指向數組的指針,然后再從數組中取數
第二個直接指向了數組地址,所以取一次就可以了!

#11



估計錯了
===========================
嘿嘿,是我舉例沒舉好

#12


cout<<*(*p+2)<<endl;  
cout<<*(ptr+2)<<endl;
====================
第一個是先取到數組的地址,因為是指向數組的指針,然后再從數組中取數
第二個直接指向了數組地址,所以取一次就可以了!

=====================================================
不是很明白,猜一下:*p是取數組的地址?那p又是什么呢?

#13


指向數組的指針。指針值為數組的地址!

#14


不明中
糊塗了

#15



估計錯了
===========================
嘿嘿,是我舉例沒舉好

結果是?

#16


結果是多少啊?
=============================
越界了,應該,得到一個毫無意義的值

#17



int a=[1,12,23];   //定義數組
int (*p)[3];       //定義指向整型數組的指針
int *ptr;          //定義指針

p = a;             //指向數組a
ptr = a;           //指向數組a  這個和p=a有什么區別??

cout<<*(*p+2)<<endl;  
cout<<*(ptr+2)<<endl; 
麻煩看看

#18


指向數組的指針。指針值為數組的地址!

==================================================
嘿嘿,‘天氣預報’的這句話擲地有聲,撥雲見日啊。

是不是理解為:*p是數組的地址,而ptr直接就是數組的地址了?

完了,我覺得現在越學越差勁了

#19


差不多

#20


ctu_85(青燈照壁人初睡,冷雨敲窗被未溫)

#include<iostream>

using namespace std;
int main(){
    
    int a[3]={1,12,23};   //定義數組
    int (*p)[3];       //定義指向整型數組的指針
    int *ptr;          //定義指針

    p = &a;             //指向數組a
    ptr = a;           //指向數組a  這個和p=a有什么區別??

    cout<<*(*p+2)<<endl;  
    cout<<*(ptr+2)<<endl; 

    system("PAUSE");
}

得到的結果是23,23
編譯器是dev-c++

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com