1樓:冒泡君
1.str是陣列,str相當
copy於陣列首地址。
bai2.mstr 指向 str,相當於du指向了陣列的第一個zhi地址,dao*mstr 就輸出h。
3.str只是相當於陣列首地址,但是對陣列名取地址,&str 得到的是一個指向整個地址的指標,型別是char(*)[12]. 所以第一行輸出hello world。
4. 最後 你將char* 指向一個型別是char(*)[12] 型別 當然就不對了。會報語法錯誤,你可以這樣寫 char *mpstr = (char*) &str; 強制轉換
你可以參考**理解一下,望採納!
2樓:匿名使用者
// 字元指標
cout << char_pointer; // will output the string from the address
// *字元指標 ===> 字元
cout << *char_pointer; // will output the char at the address
我們來看看
char str = "hello world"; // str is a (字元陣列)字元指標, 具體點是 a12_c, 12個字元陣列,char[12]
char *mstr = str; // 定義新回 字元指標 mstr, 指向 str
// 這句話類答似於 cout << str << endl; 輸出字串
cout << *&str << endl; //輸出 hello
// 輸出字元
worldcout << *mstr << endl;//輸出 h 為什麼不輸出hello world???
// str 是字元陣列, &str 是字元陣列地址(pa12_c),型別是 pa12_c
char *mpstr = &str;//這裡為什麼會顯示語法錯誤???
強制轉換型別就沒問題。
3樓:匿名使用者
第一個*和&相抵消 等於沒有 就是cout < 第三個型別不同 &str這樣返回的是char** 而mpstr是個char*型別 4樓:匿名使用者 char陣列的陣列名型別為char*,輸出 5樓:匿名使用者 char *mpstr = &str;//這裡為什麼會顯示語法錯誤??? ------------------------------其實是可以的, &str是一個地址值, 是str字元內串的首地址, 轉換一下就行了 容char *mpstr=(char*)&str; printf("%s",mpstr); 6樓:等待 。。。。。。。。。。。。 c++的指標與陣列名有什麼區別? 7樓:倒黴熊 .陣列和指標的區來別:源 陣列名確實表示bai指向陣列首地址的指du針,但這個指標很特zhi別,它的dao 值(指標的值指的是指標所指的地址)不能被改寫,能改寫的僅僅是其指向的內容,換句話說,陣列名只能指向陣列的首地址,如果有陣列char a;那麼如果出現a = a+1;這是編譯都通不過的錯誤。而對於一個普通的指標是可以的,再比如有陣列char a;那麼再定義一個char *p = a;然後再用p = p+1是合法的,這表示讓指標p指向&a[1]。 它們的第二個區別是:每當用到陣列名這個指標的時候,系統都會傳入陣列的資訊,而普通的指標只是一個4位元組的整數,例如: char a[5]; char *p = a;//指標a和指標p都指向陣列a的首地址 cout << sizeof (a) << "##" << sizeof (p) << endl; 這時的執行結果是「5##4」 8樓:一無志青年 指標中的資料是所需資料的地址,而陣列是將資料儲存到一個連續的儲存區 9樓:匿名使用者 ch是一個陣列。陣列名雖然也就是陣列第一個元素的地址。與指標有相似的地方你學過c嗎? 首先:1.str和ch這兩個是什麼關係,str是個指標,ch呢,是 c/c++中,陣列名和指標的區別 10樓:匿名使用者 一維陣列 可以認為是常量一維指標. 即除了不能修改值, 其他都可以當指標操作. 多維陣列, 可以認為是對應的陣列指標. 陣列名和指標最大的區別是, 陣列名自身不佔用記憶體空間, 即&陣列名得到的地址還是陣列名值本身, 亦即陣列首地址. 而指標是有自己的記憶體空間的, &指標變數, 得到的是另外一個地址. 陣列名和指標的區別是什麼? 11樓:手機使用者 可以!下面是我學習陣列 和指標的總結: (1)指向陣列首地址 對於一維陣列a[10]:陣列的首地址為a; 呼叫:p=a; *(a+i)或者*(p+i) 對於二維陣列a[3][4]:整個陣列的首地址為a[0];呼叫:p=a[0]; *(a[0]+i)或者*(p+i)。此時a代表陣列第一行的地址。 (3)指向陣列的每行 形如:int a[3][4]; int (*p)[4]; p=a; 呼叫:*(*(p+i)+j)例:; int (*p)[4],i,j; cin>>i>>j; p=a; //a代表的是陣列第一行的首地址. cout<<*(*(p+i)+j)< (4)指標陣列 例如:(字串陣列指標法) ; cout< 處理字串還有以下方法: (字元陣列法,c-string法) ;cout< (字串陣列法,string法) ; cout< 三種方法的共同點是name[0]都是代表的"basic"的首地址而非其本身。 (5)指向指標的指標 形如 char **p;例:; p=name+2; cout<<*p< cout<<**p< 分析:*p=name[2]= "c++"的首地址,(通常所說一個字串的「地址」實際上指的是它的「首地址」或者「起始地址」),用cout 輸出的不是字串的首地址而是整個字串(只要把一個字串的起始地址給它,cout就一直往後面輸出,直到遇到結束符'\0'為止),為了證明這一點,請看:string a=「finish」;cout<
故:本例中第一個*p輸出"c++",第二個**p代表"c++"的首地址的內容,即c。 在上一例中,name[0]為"basic"的首地址,輸出"basic",若換成*name[0]則輸出b,若換成name則代表整個陣列的首地址(而不是單個字串"basic"的首地址),所以此時輸出的是整個陣列的首地址。若用*name則輸出整個陣列的首地址的內容,即"basic"(可見字串的首地址內容為單個字元,一維陣列首地址的內容為它的第一個元素,對於二維陣列,比如int a[3][4],a代表的是第一行的地址,所以cout<
12樓:查有福季嫣 可以。a是陣列名,相當於陣列的首地址,b是一個指標,int*b= a;然後b就指向a這個地址,呼叫b[4]就是b+4的地方,也就是a+4這個地方,然後就是同一個地方,所以b[4]等價於a[4] 13樓:閩忠饒俏 首先指標陣列 和陣列指標叫法本身是種誤導 指標陣列:array ofpointers,即用於儲存指標的陣列,也就是陣列元素都是指標陣列指標:a pointerto anarray,即指向陣列的指標 其次他們本質一個是陣列,一個是指標 int* a[4] 表示是一個陣列 陣列a中的元素都為int型指標 元素表示:*a[i] *(a[i])是一樣的,因為優先順序高於* int(*a)[4] 表示是一個指標 指向陣列a的指標 元素表示:(*a)[i] #include using namespace std; intmain() ;int *a[4];//指標陣列 int(*b)[4];//陣列指標 b=&c; //將陣列c中元素賦給陣列a for(int i=0;i<4;i++) //輸出看下結果 cout<<*a[1]< intmain() {int a[5]; printf("%d\n", a);printf("%d\n", &a); printf("%d\n",a+ 1);//它的進階單位是1個int位元組數 printf("%d\n", (int*)&a+1); //它的進階單位是1個int位元組數 int(*)可以強轉為 int* printf("%d\n", //它的進階單位是1個int位元組數 printf("%d\n",&a+ 1);//它的進階單位是整個陣列的位元組長度printf("%d\n", &a[0] +1); //它的進階單位是1個int位元組數 printf("---------------\n"); printf("%d\n",sizeof(a)); //通過陣列名獲取的是陣列的大小 printf("%d\n",sizeof(&a)); //通過取陣列名獲取的是指標的大小 return0; c++陣列名到底是什麼呢?是不是地址?為什麼可以賦值給指標?
5 14樓: 是的,陣列名是地址,是第一個元素的地址——一維陣列的陣列名就是下標為0的那個元素的地址;二維陣列的陣列名就是下標為0的那一行的地址…… 陣列名和指標的區別? 15樓:百度使用者 可以!下面是我學習陣列和指標的總結: (1)指向陣列首地址 對於一維陣列a[10]:陣列的首地址為a; 呼叫:p=a; *(a+i)或者*(p+i) 對於二維陣列a[3][4]:整個陣列的首地址為a[0];呼叫:p=a[0]; *(a[0]+i)或者*(p+i)。此時a代表陣列第一行的地址。 (3)指向陣列的每行 形如:int a[3][4]; int (*p)[4]; p=a; 呼叫:*(*(p+i)+j)例:; int (*p)[4],i,j; cin>>i>>j; p=a; //a代表的是陣列第一行的首地址. cout<<*(*(p+i)+j)< (4)指標陣列 例如:(字串陣列指標法) ; cout< 處理字串還有以下方法: (字元陣列法,c-string法) ;cout< (字串陣列法,string法) ; cout< 三種方法的共同點是name[0]都是代表的"basic"的首地址而非其本身。 (5)指向指標的指標 形如 char **p;例:; p=name+2; cout<<*p< cout<<**p< 分析:*p=name[2]= "c++"的首地址,(通常所說一個字串的「地址」實際上指的是它的「首地址」或者「起始地址」),用cout 輸出的不是字串的首地址而是整個字串(只要把一個字串的起始地址給它,cout就一直往後面輸出,直到遇到結束符'\0'為止),為了證明這一點,請看:string a=「finish」;cout<
故:本例中第一個*p輸出"c++",第二個**p代表"c++"的首地址的內容,即c。 在上一例中,name[0]為"basic"的首地址,輸出"basic",若換成*name[0]則輸出b,若換成name則代表整個陣列的首地址(而不是單個字串"basic"的首地址),所以此時輸出的是整個陣列的首地址。若用*name則輸出整個陣列的首地址的內容,即"basic"(可見字串的首地址內容為單個字元,一維陣列首地址的內容為它的第一個元素,對於二維陣列,比如int a[3][4],a代表的是第一行的地址,所以cout< 陣列名與指標有太多的相似,甚至很多時候,陣列名可以作為指標使用。於是乎,很多程式設計者就被搞糊塗了。而許多的大學老師,他們在c語言的教學過程中也錯誤得給學生講解 陣列名就是指標 這種誤解的根源在於國內某著名的c程式設計教程 出版量最多的那本破書 陣列名的內涵在於其指代實體是一種資料結構,這種資料結構... 例如char a a是代表整個陣列,a 0 a 1 a 4 各自代表其中的一個數.嚴格來說,a是一支指向char的指標.a就是a 0 a 1 就是a 1 a 4 就是a 4 int array 3 上式中,array就是陣列名,你說的陣列元素名應該是array 0 或array 1 array 2 ... 1,書上說的不準確,陣列應該看做一種獨立的型別,sizeof只與型別有關。詳細的可以參考這個 http 如果你弄明白了這個剩下就簡單了。2,我先說一下結論吧。按照你的要求應該這樣定義p int p 3 因為你想要的是訪問每一行的數字,所以需要p為整型指標的陣列,這樣每個元素是整型指標,可以像p 1 ...C語言sizeof陣列名
c語言中陣列名及陣列元素名有何區別
c語言陣列與指標問題,c語言陣列與指標的問題關係請教