中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
指針與數(shù)組

指針與數(shù)組

Posted on 2009-02-17 00:05 dennis 閱讀(1131) 評論(2)  編輯  收藏 所屬分類: linux & C
一、什么時候數(shù)組和指針是相同的
1、表達式中的數(shù)組名(與聲明不同)被編譯器當作一個指向該數(shù)組第一個元素的指針
因此如a[i]這樣的訪問都被編譯器改寫或解釋為*(a+i)的形式,同樣取下標操作符的操作數(shù)是可交換的,所以a[3]可以寫成3[a],不過通常你不會這樣做。

2、下標總是與指針的偏移量相同,下標*sizeof(元素類型)就是偏移數(shù)組起始地址的實際字節(jié)數(shù)。

3、“作為函數(shù)參數(shù)的數(shù)組名”等同于指針,任何傳遞給函數(shù)的數(shù)組參數(shù)都會被轉(zhuǎn)換成指針,這是基于效率考慮,避免了數(shù)組的拷貝。在函數(shù)內(nèi)部,數(shù)組參數(shù)都將被轉(zhuǎn)換成一個指針,要牢記這一點,因此如:
void test(char a[10])
{
   printf(
"%d\n",sizeof(a));
}

顯然應(yīng)該打印指針大小4,而非數(shù)組大小。另外,注意數(shù)組參數(shù)的地址跟數(shù)組參數(shù)第一個元素的地址并不相等,在表達式中兩者一致,但是在函數(shù)調(diào)用中,由于數(shù)組參數(shù)指針也是臨時變量,因此兩者的地址是不一樣的。
可以通過下列程序觀察:

#include <stdio.h>
#include 
<stdlib.h>
void test1(char a[])
{
    printf(
"&a=%x,&(a[0])=%x,&(a[1])=%x\n",&a,&(a[0]),&(a[1]));
}
void test2(char *b)
{
    printf(
"&b=%x,&(b[0])=%x,&(b[1])=%x\n",&b,&(b[0]),&(b[1])); 
}
int main(int argc, char *argv[])
{
  
char ga[]="hello";
  printf(
"&ga=%x,&(ga[0])=%x,&(ga[1])=%x\n",&ga,&(ga[0]),&(ga[1])); 
  test1(ga);
  test2(ga);
  system(
"pause");
  
return 0;
}


二、指針跟數(shù)組什么時候不同
1、如果定義了一個數(shù)組,在其他文件對它進行聲明也必須聲明為數(shù)組,定義和聲明必須匹配,指針也是如此。
2、指針始終是指針,它絕不可以寫成數(shù)組。可以用下標形式訪問指針的時候,一般都是指針作為函數(shù)參數(shù)時,并且你知道傳遞給函數(shù)的實際是一個數(shù)組。
3、數(shù)組名是不可改變的左值,因此如
int array[100],array2[100];
array
=array2;
array++;
array--;
 
都將出錯,但是在函數(shù)內(nèi)部:

int array2[100];
void fun(int array[])
{
  array
=array2;
}

卻可以,因為在函數(shù)內(nèi)部array雖然被聲明為數(shù)組實際上卻是指針。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
數(shù)組的遞進理解——由一維到多維,指針和數(shù)組的關(guān)系比較等
c 數(shù)組 字符串
C語言實現(xiàn)動態(tài)數(shù)組,克服靜態(tài)數(shù)組大小固定的缺陷
簡說C語言數(shù)組指針的妙用
用LLVM來開發(fā)自己的編譯器(三)
C/C++筆試題-主要考察C/C++語言基礎(chǔ)概念、算法及編程,附參考答案
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服