指針,數組總結

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

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

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

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

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

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

爲數組賦值:編譯器

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

#define SIZE 5io

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)

相關文章
相關標籤/搜索