編程基礎知識

1. 優先級及”++”

執行代碼:
int a = 1;
int b = 0;
int c = 0;
int d = (++a) * (c = 1);
則a,b,c,d的值分別是多少?
2,0,1,2

2. bool 類型與float 類型使用if判斷“零值”

bool flag;
    if(flag) 或 if(!flag)
float x = 0.001;
    if(x <= 0.001)

3.數據類型的轉換

void foo(void)
{
    unsigned int a = 6;
    int b = -20;
    (a+b>6) ? puts(">6") : puts("<=6"); 
}
輸出:
    >6

有符號數與無符號數轉換規則, 將轉換爲無符號類型。
-20 的機器數爲FFFF FFECH
則a+b大於 6

所以儘量使用無符號數,來保證數據類型的統一。

4.預處理指令

C語言的編譯預處理指令均以“ # ”開頭。例如:#pragma,#define。
sizeof 爲運算符,malloc 爲函數。

5.頭文件

#include <filename.h>#include "filename.h" 的區別?
1.使用宏指令#include <filename.h>是通知編譯器在預處理時要包含開發環境中提供的名爲filename.h 的頭文件。
2.使用宏指令#include "filename.h"是要求編譯器在預處理時優先包含編譯者指定路徑下的名爲filename.h的頭文件,如果在指定路徑下沒有發現名爲filename.h的頭文件,則使用系統提供的頭文件。

6. .h文件標準開頭

#ifndef DIALOG_H    // 判斷如果沒有宏定義DIALOG_H,則執行;如果已經定義DIALOG_H則不執行。
#define DIALOG_H    // 宏定義 DIALOG_H
...代碼段
#endif // DIALOG_H  //  結束

作用是防止該頭文件被重複引用。

7.內存分配

棧:由編譯器進行管理,自動分配和釋放。
堆:用於程序動態申請分配和釋放空間。
全局(靜態)存儲區:分爲DATA段和BSS段。DATA段存放初始化的全局變量和靜態變量;BSS段存放未初始化的全局變量和靜態變量。
程序代碼段:存放程序的二進制代碼。

8.static作用

  1. 在一個函數中說明一個靜態變量。
  2. 在一個模塊內說明一個靜態變量,可以被模塊內所有函數訪問,但不能被模塊外其他函數訪問。
  3. 在一個模塊內說明一個靜態的函數,靜態函數只能被同一模塊內的其他函數嵌套調用,使函數本地化。

9.數組與指針

具有相同類型的指針類型變量p與數組a,不能進行的操作是(D)
A. p = a; B. *p = a[0]; C. p = &a[0]; D. p =&a;
選項D:&a 的含義是取數組指針(即得到的地址的數據類型是指向數組的指針),與指針變量p的類型不匹配。可修改爲 p = (int *)&a;

#include <stdio.h>

int main()
{
    int a[4] = {1, 2, 3, 4};
    int *ptr = (int *)(&a + 1);
    printf("%d\r\n",(*ptr - 1));

    return 0;
}
輸出:4

解析:在函數中,a爲int類型數組,數組名a也代表數組a的起始地址。&a的含義是指向數組a的指針( 即int()[4] ),表達式(&a+1)的含義是指向下一個有4個int元素的整型數組,即(&a+1)在數值上等於數組元素a[3]的“下一個地址”。爲指針ptr賦值的表達式是(int )(&a+1),其含義是將地址強制轉換爲指向int的指針,即指針ptr指向a[3]之後的“下一個元素”。

int (*a)[10];   //定義的是一個數組指針,指向一個有10int類型元素的整型數組。
int *a[10];     // 定義的是一個指針數組,每個元素爲指向int型的指針。

設有int w[3][4];pw是與數組名w等價的數組指針,則pw的初始化語句爲(int (*pw)[4] = w);
給地址0xaae0275c賦值爲1?

1.volatile int *p = (int *)0xaae0275c;  *p = 1;
2.volatile int *p = (int *)0xaae0275c;  p[0] = 1;
3.*(volatile int *)0xaae0275c = 1;

10.二維數組

數組定義爲 int a[4][5];引用*(a+1)+2表示a數組第1行第2列元素的地址。
由於a是二維數組, a:數組名,代表數組的起始地址(常量)
a+1:類型也爲 int (*)[5],指向a[1]
*(a+1):類型爲int *,指向一維數組中下標爲 1的行。

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