指針,數組總結

1,數組是有一系列相同元素構成的。

2,const int abc[MONTH] = {1,2,3,4,5,6,7};  //  需要在const聲明數組時對其進行初始化,因爲在聲明後,不能再對其進行賦值。

3,當使用空的方括號對數組進行初始化時,編譯器會根據列表中的數值來確定數組的大小。

確定數組的元素的個數:sizeof(abc)/sizeof(abc[0]); 

C99對數組初始化增加了一些新特性,可以對某個元素專門初始化,例如:abc[6] = {abc[5] = 123};

還有,如果在一個指定初始化項目後跟有不止一個值,則這些數值經用來對後續的數組元素初始化;第二,如果多次對一個元素初始化,則最後一次有效。

爲數組賦值:

C不支持把數組作爲一個整體來賦值,也不支持用花括號括起來的列表形式進行賦值(初始化的時候除外)。

#define SIZE 5

int oxen[SIZE] = {1,3,4,5};  //可以的

int yaks[SIZE];

yaks  = oxen;  //不允許

yake  = oxen;  //不允許

yake[SIZE] = oxen[SIZE];  /不正確

yake[SIZE] = {1,3,4,5};   //不起作用

編譯器不檢查索引的合法性。

數組名也是該數組首元素的地址;

例如:

#include <stdio.h>
#define MONTH 12

int main(void)
{
    int days[MONTH] = {31,28,31,30,31,30,31,31,30,31,30,31};
    int index;
    for(index = 0;index < MONTH;index++)
        printf("month %d has %d days.\n",index + 1,*(days + index);
    return 0;
}
/*   與days[index]相同  */

函數原型:就是函數聲明,函數原型不是必須的,如果函數定義在這個函數使用之前,那麼就不需要函數原型,也就是函數聲明。因爲函數原型是一條語句,所以要加分號,函數原型包括函數的返回值類型,函數名,參數列表,還有一點就是函數原型一定要與函數定義一致,否則後果不堪設想,哈哈。

函數,數組,指針:

int sum(int * ar,int n)   //更通用的做法

這裏的第一個參數把數組地址和數組類型傳給了第一個參數,第二個參數傳的是數組元素的個數。

只有在函數原型和函數定義頭中,ar[] 和*ar 纔可以互換。

無論任何情況,int *ar永遠代表ar是指向int 的指針。ar[]也可以表示ar是指向int的指針,但必須是在函數聲明或是函數定義頭當中纔可以。

所以以下都是等價的:

int abc[char * pr,int n);

int abc[char pr[],int n);

int abc[char *,int);

int abc[char [],int);

如果在函數定義中,這樣就是等價的:

int abc[char * pr,int n)

int abc[char pr[],int n)



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