1. 程式人生 > >黑馬程式設計師—C語言筆記—陣列和字串

黑馬程式設計師—C語言筆記—陣列和字串

一、陣列

1、概念:是用來儲存一組資料的;

a、構造型別:有無數個基本資料型別組成的型別;

b、特點:(1)、只能存放一種型別的資料;(2)、裡面存放的資料稱為元素

2、陣列的定義

a、定義格式: 資料型別 陣列名[元素個數]

b、簡單使用:

(1)、簡單的初始化;int age[3] = {11, 12, 13};

(2)、元素有順序之分,每個元素都有一個唯一的下標(索引index),從0開始

(3)、陣列元素的訪問:a[i]

3、陣列遍歷:按順序檢視陣列的每個元素

#include <stdio.h>

int main()

{

int age[3] = {11, 12, 13};

for(int i = 0; i <3;i++)

{

printf(“age[%d] = %d\n”, i, age[i]);

}

return 0;

}

4、初始化寫法:

a、只能在定義陣列的同時進行初始化,定義初始化時陣列元素個數只能是常量。

int a[3]={1,2,3};

int a[3]={1};

int a[3]={ [0]=1,[2]= 2};

int a[]={1,2,3};

int a[‘A’]={1,2,3};

b、錯誤寫法:

    int a[];  int[] a;  a={1,2,3};  a[3]={1,2,3}; // 只能在定義陣列的同時進行初始化

 int count=3;

 int a[count]={1,2,3};// 這是錯誤的,如果想在定義陣列的同時進行初始化,陣列元素個數必須是常量,或不寫

     int a[count];// 這是可以的,但未定義的陣列元素的值是不確定的,定義陣列過程中並沒有進行初始化,陣列元素個數可以是變數。

     a[0]=1;

5、計算陣列的長度(計算陣列元素的個數)

int a[]={1,2,3};

     int count = sizeof(a)/sizeof(a[0]);

6、陣列的記憶體儲存細節

a、儲存空間的劃分:記憶體的分配是從高地址到低地址進行的,但一個數組內部元素又是從低到高進行的;

b、陣列名就代表陣列的地址;

      列印每個元素的地址

        #include <stdio.h>

int main()

{

int a[3] = {23,53,3};

for(int i =0;i<3;i++)

{

printf(“a[%d]的地址是:%p\n”,i,&a[i]);

}

return 0;

    }

7、陣列和函式

a、陣列作為函式的引數,可以省略元素個數

b、陣列作為函式引數,是進行地址傳遞,傳遞的是整個陣列的地址,修改函式形引數組元素的值,會影響到外面的實引數組。

c、陣列當作函式引數傳遞時,會當做指標變數來使用,指標變數在64bit編譯器環境下佔據8個位元組

void change(int arr[])

{

int size = sizeof(arr);//這個計算的不是陣列的字元長度,而是地址型別的長度

printf(“傳遞引數後的長度:%d”,size);

}

int main()

{

int a[]={1,2,3,4,5,6};

Change(a);

return 0;

}

8、例項練習:

設計一個函式:將一維整型陣列中的元素逆序存放。比如本來是1,3,4,2,逆序存放就變成了:2431

#include <stdio.h>

int main()

{

    int a[]={4,6,2,23,42,4,53};

    int length = sizeof(a)/sizeof(a[0]);

    void arrayChange(int arr[], int length);

    arrayChange(a,length);

     printf("一維整型陣列中的元素逆序存放的結果是\n");

     for (int i=0; i<length; i++) {

        printf(“%d\n”,a[]);

     }

     return 0;

void arrayChange(int arr[],int length)

{

    int temp;

    for(int i=0; i<length/2; i++)

    {

        temp=arr[ i ];

        arr[ i ]=arr[length-1-i];

        arr[length-1-i]=chan;

    }

}

9、二維陣列:是一個特殊的一維陣列,他的陣列元素是一維陣列

a、a[2][3]可以看作由一維陣列a[0]和一維陣列a[1]組成,這兩個一維陣列都包含了3int型別的元素,記憶體儲存細節如下:

b、二維陣列初始化

 int ages2[3][5]= {

        {10, 11, 90, 89, 70},

        {11, 12, 91, 90, 71},

        {12, 13, 92, 91, 72}

};

二、字串

1、概念:是很多字元組合在一起形成的字串例:"jack"

a、初始化:

char name[8]="jack";

char name1[8]={'j', 'a', 'c', 'k', '\0'};

char name2[8]={'j', 'a', 'c', 'k', 0};

char name3[8]={'j', 'a', 'c', 'k'};// 可以看作是隱藏了’\0’;

char name4[]={'j', 'a', 'c', 'k'};// 這個不算是一個字串,只能說是一個字元陣列

b、輸出: %s

printf("字串輸出:%s\n",name);

2、'\0'的作用:字串結束的標誌

%s是從輸出的變數的地址開始一個一個的輸出字元,直到遇到’\0’為止;例:

#include <stdio.h>

int main()

{

char user[]="hello";

   char name[]={'o', 'k' };

   printf("%s\n",name);//name地址開始輸出,結果是okhello;

    return 0;

}

3、常用字串處理函式

strlen();//計算字串長度。

 #include <stdio.h>

#include <string.h>

int main()

{

char user[]="hello你好";

int length = strlen(user);

  printf("%d\n", length);//結果是11

    return 0;

}

a、計算的是字元數,不是字數;

b、計算的字元不包括’\0’;

c、從某個地址開始數字符的個數,直到遇到’\0’為止

4、printf與sizeof

a、printf函式返回的字串常量的字元數,並不是字數

b、sizeof用來計算一個變數或者一個常量所佔的記憶體位元組數。

5、字串陣列

使用場合:儲存多個字串,如儲存3個人的名字:

char name[3][15]={"jack", "rose", "jim"};


相關推薦

no