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

不可或缺 Windows Native (2),windowsnative

編輯:關於C語言

不可或缺 Windows Native (2),windowsnative


[源碼下載]


不可或缺 Windows Native (2) - C 語言: 常量,變量,基本數據類型



作者:webabcd


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

  • 常量
  • 變量
  • 基本數據類型



示例
cDataType.h

#ifndef _MYHEAD_DATATYPE_
#define _MYHEAD_DATATYPE_ 

#ifdef __cplusplus  
extern "C"
#endif  

char *demo_cDataType();

char *demo_constant();

char *demo_integer();

char *demo_float();

char *demo_char();

#endif  

cDataType.c

/*
 * 常量,變量,基本數據類型的相關知識點
 *
 * 
 * 定義變量的時候就會分配內存,比如:
 * int i; // 定義時就分配了內存
 * i = 100; // 為那塊內存賦值
 *
 * 注:
 * 1、聲明一個變量意味著向編譯器描述變量的類型,並分配存儲空間
 * 2、聲明了一個變量後,如果需要使用的話則需要對其賦值,未賦值的變量不能使用
 */

#include "pch.h"
#include "cDataType.h"
#include "cHelper.h"

#define CONSTANT1 100
#define CONSTANT2 3.14 // 常量中定義浮點型就是 double 類型的
#define CONSTANT3 "常量"

char *demo_cDataType()
{
    char *str1 = demo_constant();
    char *str2 = demo_integer();
    char *str3 = demo_float();
    char *str4 = demo_char();

    // 關於基本數據類型之間的轉換
    float a = 3.14;
    int b = a; // 自動轉換
    int c = (int)a; // 強制轉換

    return str_concat4(str1, str2, str3, str4);
}


// 常量的知識點
char *demo_constant()
{
    char *str1 = int_toString(CONSTANT1);
    char *str2 = float_toString(CONSTANT2);
    char *str3 = CONSTANT3;

    // 這是 const 常量
    const int i = 0;

    // const 常量和 #define 常量的區別,如下:
    /*
        如果是 #define x 1 + 2
        那麼表達式 3 * x * 4 就相當於 3 * 1 + 2 * 4,結果是 11
        如果是 const int x = 1 + 2
        那麼表達式 3 * x * 4 就相當於 3 * 3 * 4,結果是 36

        由上可知每次引用 #define 時都會做一次內存分配;而 const 僅在定義的時候分配一次內存



        嚴格來說 const 就是一個不可變的變量,在 ANSI C 標准中,如下寫法就是錯誤的
        const int n = 10;
        int ary[n];
        因為 ANSI C 標准規定了定義數組的長度時必須用常量,而 const 的本質是一個變量(雖然不可變)
     */

    return str_concat3(str1, str2, str3);
}


// 整型的知識點
char *demo_integer()
{
    // 對於 32 位系統來說,其占用 4 字節(其區間為:-2147483648~2147483647)
    int i = 0;

    // 對於 32 位系統來說,其通常占用 2 字節(標准要求只要不大於 int 即可)
    short si = 0; 

    // 對於 32 位系統來說,其通常占用 8 字節(標准要求只要不小於 int 即可)
    long li = 0L; // L 或 l 代表長整形

    // 對於 32 位系統來說,其占用 4 字節
    unsigned ui = 0U; // U 或 u 代表無符號整型(其區間為:0~4294967295)

    // 對於 32 位系統來說,其通常占用 8 字節(標准要求只要不小於 int 即可)
    unsigned long ul = 0UL; // UL 或 ul 代表無符號長整形
    


    // 以“0”開頭就是八進制,其十進制的結果為 13
    int x = 015; 

    // 以“0X”開頭就是十六進制,其十進制的結果為 65535
    int y = 0XFFFF; 



    // 演示一下什麼是數據的溢出?
    // 假定 short 占用 2 個字節,其最大值為 32767,那麼再加 1 呢,就變成 -32768 了,原理如下:
    // 有符號 32767 的二進制為 0111111111111111,加 1 後變為 1000000000000000 ,就是 -32768 了
    short abc = 32767;
    abc++; // -32768



    // 注意:對於有符號數據來說,左面第 1 表示符號,0 表示正,1 表示負
    // 判斷一個數字是否有符號
    if (ui >= 0 && ~ui >= 0) // ~ 是取反操作
        return "unsigned int 是無符號";
    else
        return "bug";
}


// 浮點型的知識點
char *demo_float()
{
    // 4 字節
    float f = 3.14F; // F 或 f 代表浮點型

    // 8 字節
    double f2 = 3.14F;

    // 16 字節
    long double f4 = 3.14F;



    // 指數形式,即科學表示法
    float x = 0.00314E3; // 等於 0.00314 * 10的3次方
    float y = 314E-2; // 等於 314 * 10的-2次方(負數冪就是其正數冪的倒數,即 10 的 -2 次方的值為:1/100)



    // 通過科學表示法來理解浮點型數據在內存中的存放形式
    // 在二進制科學表示法中,S=M*2^N 主要由三部分構成:符號位+階碼(N)+尾數(M)
    // 對於float型數據,其二進制有32位,其中符號位1位,階碼8位,尾數23位;對於double型數據,其二進制為64位,符號位1位,階碼11位,尾數52位。

    return  float_toString(y);
}


// 字符型的知識點
char *demo_char()
{
    // 用單引號標記字符類型
    char c = 'x';



    // 常用轉義字符
    // \r - 回車
    // \n - 換行
    // \t - 制表
    // \b - 退格
    // \\ - \
    // \' - 單引號
    // \" - 雙引號



    // \ 後面跟一個 ASCII 的八進制值,則結果為其對應的字符
    char *str1 = "\101"; // A
    
    // \x 後面跟一個 ASCII 的十六進制值,則結果為其對應的字符
    char *str2 = "\x41"; // A

    // 字符在內存中的保存形式:保存的就是其對應的 ASCII 碼值



    // 用雙引號標記字符串類型,字符串其實就是字符數組
    // 字符串的結束標識為:'\0',即 ASCII 碼中的 0,也就是 NULL
    // 也就是說,字符串的占用空間為:字符串的字節數 + 1
    char str[] = "abc"; // 其在內存中的存放形式為:abc\0,占用 4 個字節

    return str_concat2(str1, str2);
}



OK
[源碼下載]

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