程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 不可或缺 Windows Native (5),windowsnative

不可或缺 Windows Native (5),windowsnative

編輯:關於C語言

不可或缺 Windows Native (5),windowsnative


[源碼下載]


不可或缺 Windows Native (5) - C 語言: 數組



作者:webabcd


介紹
不可或缺 Windows Native 之 C 語言

  • 數組



示例
cArray.h

#ifndef _MYHEAD_ARRAY_
#define _MYHEAD_ARRAY_ 

#ifdef __cplusplus  
extern "C"
#endif  

char *demo_cArray();

#endif  

cArray.c

/*
 * 數組
 *
 *
 * 定義數組,int ary[10],相關說明如下:
 * 1、int 是數據元素的數據類型,10 是數組元素個數,系統會根據數組元素的數據類型和元素個數來分配內存空間
 * 2、整個數組是以首地址開頭的一塊連續的內存單元
 * 3、數組名 ary 就代表了該數組的首地址,也就是說 ary 相當於 &ary[0]
 */

#include "pch.h"
#include "cArray.h"
#include "cHelper.h"

char *demo_cArray()
{
    // 定義並初始化一個數組
    // int ary[] = { 0, 1, 2, 3, 4 };

    // 定義一個長度為 10 的數組,並初始化前 5 個元素,其他元素默認為 0
    // 注:定義數組的長度時必須用常量,不能用變量(注:ANSI C99 是允許用變量定義局部數組大小的)
    int ary[10] = { 0, 1, 2, 3, 4 };
    // 修改數組中某一個元素的值(注:只能對數組的元素賦值,而不能用賦值語句對整個數組賦值)
    ary[8] = 0;

    // sizeof(ary) - 數組 ary 占用的內存空間
    // 由於 ary 是一個整型數組,而每個整型數據占用 sizeof(int) 個字節的空間,則數組元素的個數為 sizeof(ary) / sizeof(int)
    int count = sizeof(ary) / sizeof(int);
    for (int i = 0; i < count; i++)
    {
        int x = ary[i];
    }



    // 指定行數(一維長度)和列數(二維長度)定義一個二維數組,並初始化
    int ary2[3][2] = { { 1, 2 }, { 3, 4 }, { 5, 6 } };
    // 修改二維數組中某一個元素的值
    ary2[0][1] = 2;

    // 初始化二維數組時,也可以一行一行地按順序寫入數據,如下。其結果同上
    // int ary2[3][2] = { 1, 2, 3, 4, 5, 6 };

    // 定義二維數組時,可以省略行數(一維長度),如下。其結果同上
    // int ary2[][2] = { 1, 2, 3, 4, 5, 6 };

    // 遍歷二維數組
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 2; j++)
        {
            int x = ary2[i][j];
        }
    }



    // 定義一個字符數組,並初始化
    // char aryStr[] = { 'i', ' ', 'a', 'm', ' ', 'w', 'e', 'b', 'a', 'b', 'c', 'd' }; // 長度12,占用空間12

    // 定義一個字符數組,並按字符串的形式對其初始化
    // char aryStr[] = { "i am webabcd" }; 同 char aryStr[] = "i am webabcd"; // 長度12,占用空間13

    // 以字符串的形式賦值給字符數組時,會自動在結尾處多加一個字符串結束符,即'\0',用於標記字符串結束(字符串的結束標識為:'\0',即 ASCII 碼中的 0,也就是 NULL)
    char aryStr[] = "i am webabcd";

    // 字符串長度
    int length = strlen(aryStr); // 12
    // 字符串占用的內存空間(如果 aryStr 賦值給別人,或當做參數傳遞時,其就表現為數組的首地址了,如果再對其 sizeof 的話,取得的就是指針所占用的內存空間的大小)
    int memory = sizeof(aryStr); // 13

    /*
     * 注意:
     * 1、此處通過 sizeof(aryStr) 獲取到的是數組的空間占用,通過 strlen(aryStr) 獲取到的是數組的長度
     * 2、然而之前我們說過,數組名 aryStr 就是數組的首地址,整個數組是以首地址開頭的一塊連續的內存單元
     * 3、當我們把 aryStr 賦值給別人(比如 char *s = aryStr;),或當做參數傳遞時,其就表現為數組的首地址了。比如在對應的形參中,如果 sizeof(ary) 的話,其得到的是指針占用的內存空間的大小
     */


    /*
     * 另:
     * 1、如果你知道了一個字符串的首地址,那麼你就知道這個字符串的長度,因為它會以“0”結尾
     * 2、如果你知道一個普通數組的首地址,那麼你是不知道這個數組的長度的,因為你不知道它在哪裡結尾
     */



    // 寫到數組了,就用“冒泡排序”舉個例子吧
    // 記得以前去某公司 C# 筆試,題目是對一個數組排序,我寫的是
    /*
    int[] ary = { 1, 9, 5, 6, 3 };
    ary = ary.OrderBy(p => p).ToArray();
    */
    // 結果面試官說這個不對...
    void bubble_sort(int ary[], int length);
    int ary_int[] = { 14, 80, 19, 6, 26, 2 };
    bubble_sort(ary_int, 6); // 2, 6, 14, 19, 26, 80


    return str_concat2(int_toString(length), int_toString(memory));
}


// 冒泡排序算法
void bubble_sort(int ary[], int length)
{
    for (int i = 0; i < length - 1; i++)
    {
        bool sorted = true;

        for (int j = 0; j < length - 1 - i; j++)
        {
            if (ary[j] > ary[j + 1])
            {
                sorted = false;
                int temp = ary[j];
                ary[j] = ary[j + 1];
                ary[j + 1] = temp;
            }
        }

        if (sorted)
            break;
    }
}


/*
寫到 for 循環,然後發現一個事情


for(int i=0;;) 這個在 C99 下是合法的

而以前的標准 for(int i=0;;) 是不合法的(不能在語句中聲明變量),需要這麼寫
int i;
for(i=0;;);
*/

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved