當前位置:首頁 » 編程語言 » c語言數組和指針

c語言數組和指針

發布時間: 2022-05-29 07:37:24

c語言指針和數組的關系

c語言中,指針變數中可以保存任意的地址值;數組名是一個地址常量,不可以更改。

⑵ C語言中:數組指針與指針數組有什麼區別

數組指針是指向這個數是這個數組;
指針數組是存放一類指針的數組,這個數組的每個元素都是一個指針;
例子:
int
a[10];
int*
s;
s
=
a;//這里s就是一個數組指針,它的值就是數組a
的首地址;當然,如果a是一個整數,那s就是一個指向整型的指針;
int
a;
int*
s[5];
for(int
i=0;i<5;i++)s[i]=a;
//這里s就是一個指針數組,它的每個元素都是整型變數a的地址

⑶ C語言中:數組指針與指針數組有什麼區別

數組指針是指向這個數組首地址的指針,指向對象是這個數組;
指針數組是存放一類指針的數組,這個數組的每個元素都是一個指針;
例子:
int a[10];
int* s;
s = a;//這里s就是一個數組指針,它的值就是數組a 的首地址;當然,如果a是一個整數,那s就是一個指向整型的指針;

int a;
int* s[5];
for(int i=0;i<5;i++)s[i]=a;
//這里s就是一個指針數組,它的每個元素都是整型變數a的地址
應該算比較明白了吧
謝樓上提醒

⑷ c語言指針與數組,怎麼聯系起來

1、指針的本質是一個與地址相關的復合類型,它的值是數據存放的位置(地址);數組的本質則是一系列的變數。
2、數組名對應著(而不是指向)一塊內存,其地址與容量在生命期內保持不變,只有數組的內容可以改變。指針可以隨時指向任意類型的內存塊,它的特徵是「可變」,所以我們常用指針來操作動態內存。
3、當數組作為函數的參數進行傳遞時,該數組自動退化為同類型的指針。

⑸ C語言數組名和指針的區別

數組和指針的區別:
數組名確實表示指向數組首地址的指針,但這個指針很特別,它的值(指針的值指的是指針所指的地址)不能被改寫,能改寫的僅僅是其指向的內容,換句話說,數組名只能指向數組的首地址,如果有數組char a[];那麼如果出現a = a+1;這是編譯都通不過的錯誤。而對於一個普通的指針是可以的,再比如有數組char a[];那麼再定義一個char *p = a;然後再用p = p+1是合法的,這表示讓指針p指向&a[1]。
它們的第二個區別是:每當用到數組名這個指針的時候,系統都會傳入數組的信息,而普通的指針只是一個4位元組的整數,例如:

chara[5];
char*p=a;//指針a和指針p都指向數組a的首地址
cout<<sizeof(a)<<"##"<<sizeof(p)<<endl;

這時的運行結果是「5##4」

⑹ c語言中的數組和指針的區別

C語言中,數組的名稱等價於數組的首地址,
當然可以利用指針開辟動態空間,使用方式與數組在形式上相同的,
但是他們有一個本質的區別,數組名相當於一個地址常數,而指針是一個以地址為內容的變數。
指針與數組的關系可以參考下面的網頁:
http://..com/question/341950481.html

⑺ c語言中數組和指針的區別與聯系

數組是用指針方式實現的,但數組值是一個常量,即不能改變數組的首地址,而指針是一個變數,可以改變它的值;如:數組 a和指針p,p=a+1;是合法的,但a=a+1;是不合法的。

⑻ C語言中,指針和數組的區別和聯系

指針就是一個裝地址的變數,數組是內存中的一個區域,而數組名是這個區域的首地址。也就是說你在定義指針的時候編譯器只分配了一個變數的空間(空間大小由內存地址長度決定),而定義數組的時候編譯器分配了一段區域的空間(空間大小由[
]裡面的數字和數組的類型決定)。使用上你可以把一個地址賦值給指針,但是不能賦值給數組名。你可以直接給數組裡面的變數賦值,這是安全的,因為內存已經申請好了,而給指針裡面裝個那個地址賦值就要小心了,因為指針裡面那個地址很可能會出錯。

⑼ C語言中一維數組和指針有什麼區別

指針都沒初始化,運行個毛啊。

應該這樣:

⑽ c語言中怎樣理解數組和指針

數組和指針的關系

一、數組的數組名其實可以看作一個指針。看下例:

例1:

int array[10]={0,1,2,3,4,5,6,7,8,9},value;

value=array[0];//也可寫成:value=*array;

value=array[3];//也可寫成:value=*(array+3);

value=array[4];//也可寫成:value=*(array+4);

上例中,一般而言數組名array代表數組本身,類型是int [10],但如果把array看做指針的話,它指向數組的第0個單元,類型是int *,所指向的類型是數組單元的類型即int。因此*array等於0就一點也不奇怪了。同理,array+3是一個指向數組第3個單元的指針,所以*(array+3)等於3。其它依此類推。

二、指針數組的定義及使用

例2:

char *str[3]={ //注意指針數組的定義及初始化格式

"Hello,this is a sample!",

"Hi,good morning.",

"Hello world"

};

char s[80];

strcpy(s,str[0]);//也可寫成strcpy(s,*str);

strcpy(s,str[1]);//也可寫成strcpy(s,*(str+1));

strcpy(s,str[2]);//也可寫成strcpy(s,*(str+2));

上例中,str是一個三單元的數組,該數組的每個單元都是一個指針,這些指針各指向一個字元串。把指針數組名str當作一個指針的話,它指向數組的第0號單元,它的類型是char**,它指向的類型是char *。
*str也是一個指針,它的類型是char*,它所指向的類型是char,它指向的地址是字元串"Hello,this is a sample!"的第一個字元的地址,即'H'的地址。 str+1也是一個指針,它指向數組的第1號單元,它的類型是char**,它指向的類型是char *。

*(str+1)也是一個指針,它的類型是char*,它所指向的類型是char,它指向"Hi,good morning."的第一個字元'H',等等。

三、數組名小結:
聲明了一個數組TYPE array[n],則數組名稱array就有了兩重含義:第一,它代表整個數組,它的類型是TYPE [n];第二,它是一個指針,該指針的類型是TYPE*,該指針指向的類型是TYPE,也就是數組單元的類型,該指針指向的內存區就是數組第0號單元,該指針自己佔有單獨的內存區,注意它和數組第0號單元占據的內存區是不同的。該指針的值是不能修改的,即類似array++的表達式是錯誤的。

在不同的表達式中數組名array可以扮演不同的角色。

(1)在表達式sizeof(array)中,數組名array代表數組本身,故這時sizeof函數測出的是整個數組的大小。

(2)在表達式*array中,array扮演的是指針,因此這個表達式的結果就是數組第0號單元的值。sizeof(*array)測出的是數組單元的大小。

(3)表達式array+n(其中n=0,1,2,....。)中,array扮演的是指針,故array+n的結果是一個指針,它的類型是TYPE*,它指向的類型是TYPE,它指向數組第n號單元。故sizeof(array+n)測出的是指針類型的大小。

四、數組指針的定義及使用:

例3:

int array[10];

int (*ptr)[10]; //數組指針ptr,指向一個數組int[10]

ptr=&array;

上例中ptr是一個指針,它的類型是int (*)[10],他指向的類型是int [10],我們用整個數組的首地址來初始化它。在語句ptr=&array中,array代表數組本身。

五、對指針和數組執行sizeof操作的結果:
sizeof(指針名稱)測出的究竟是指針自身類型的大小呢還是指針所指向的類型的大小?答案是前者。例如:

int (*ptr)[10];

則在32位程序中,有:

sizeof(int(*)[10])==4

sizeof(int [10])==40

sizeof(ptr)==4

實際上,sizeof(對象)測出的都是對象自身的類型的大小,而不是別的什麼類型的大小。

熱點內容
編程題解析 發布:2025-02-12 08:40:30 瀏覽:453
bilibi手機緩存目錄在 發布:2025-02-12 08:33:11 瀏覽:457
聽ti密碼是多少 發布:2025-02-12 08:22:15 瀏覽:288
淘寶上傳視頻憑證 發布:2025-02-12 08:06:46 瀏覽:878
java畫 發布:2025-02-12 08:01:00 瀏覽:549
光遇安卓官服是在哪裡下載 發布:2025-02-12 07:47:47 瀏覽:648
安卓手機如何關閉程序打開廣告 發布:2025-02-12 07:31:06 瀏覽:469
新版影視大全不能緩存 發布:2025-02-12 07:31:04 瀏覽:976
sql兩個欄位in 發布:2025-02-12 07:29:45 瀏覽:771
漂亮網站源碼 發布:2025-02-12 07:26:40 瀏覽:760