- malloc()、free()、calloc() 與 realloc()
- int *arr1 = malloc(1000 * sizeof(int)); //說明陣列動態配置的方式
- int *arr1 = calloc(1000, sizeof(int)); //宣告空間配置
- free(arr1);
- int *arr2 = realloc(arr1, sizeof(int) * size * 2);
- arr1與arr2的位址相同並不保證,realloc ()會需要複製資料來改變記憶體的大小,若原位址有足夠的空間,則使用原位址調整記憶體的大小,若空間不足,則重新尋找足夠的空間來進行配置,在這個情況下,realloc()前舊位址的空間會被釋放掉,因此,您必 須使用realloc()所傳回的新位址,而不該使用舊位址,若realloc()失敗,則傳回空指標(null)
- const int* p 和 int* const q 兩者之差別:
- 前指標指的內容不可變動,後指標不可變動
- void dp()const; \\我不會更改成員
- const int* op() const{return &data;} //回傳const參考 保證不會更改
- 3的倍數:所有的偶数位和奇数位出现1的次数 的差為3的倍數(遞迴)
- 32-bit machine用C語言對位址 0x00005000 的第三個bit設成0,第五個bit設成1
int i = 0x00005000;
i = i & 0x00001000;
- 寫出一個Macro求出兩數之最大值:
- #define Max(x, y) ((x)>=(y)? (x): (y))
- 給予10個任意整數,輸出其最小值、最大值、平均值
int Max = a[0], Min = a[0], Avg = 0;
for(int i = 0 ; i < 10 ; i++)
{
if(Min > a[i])
Min = a[i];
if(Max < a[i])
Max = a[i];
Avg += a[i];
}
cout << Min << Max << static_cast<float>(Avg)/10 << endl;
寫出一個字串拷貝程式: void StrCpy(char* dst , char* src)
- for(; *src != '\0', *dst = *src; dst++, src++)
interrupt service routine 之錯誤
__interrupt double isr(double r)
{
double area = PI*r*r ;
printf("%f\n",area) ;
return area ;
}
- ISR不能有返回值(不知道給誰)
- ISR不能傳遞參數(不知道誰呼叫)
- 浮點運算和pintf有重入問題
- ISR應短而高效
整數轉換字串
char* s;
sprintf(s, "%d", i);
寫出一個程式若輸入為 12345678 , 則返回值為 56781234
typedef unsigned long DWORD;
DWORD fun(DWORD num)
{
DWORD h, l;
h = num << 16;
l = num >> 16;
return h ^ l;
}
- 設定一個絕對位址為0x67a9的整數型變數的值為0xaa55
int *ptr;
ptr = (int *)0x67a9;
*ptr = 0xaa55;
重載問題
class E
{
public:
int test(int *i)
{
cout << "1" <<endl;
}
int test(int &i)
{
cout << "2" <<endl;
}
int test(const int &i)
{
cout << "3" <<endl;
}
/*int test(int i)
{
cout << "4" <<endl;
}*/
};
int main()
{
int *i = new int(10); // 1
int a = 10; // 2 4 無法分別 只能留一種
const int b = 10; // 3
E t;
t.test(i);
t.test(a);
t.test(b);
return 0;
}
判斷2的次方
單向LinkList操作
int main()
{
int a[5][2] = {0,1,2,3,4,5,6,7,8,9};
int *p = a[0];
int (*p2)[2] = &a[1];
++p;
++p2;
printf("%d\n",*p); //1 p 是整型指針,初始指向元素0,加1指向1
printf("%d\n",**p2); //4 p2是含2個元素的數組指針,初始指向元素2,該指針加1是向後移動2個數據,所以指向4
printf("%d \n",p2[1][2]); //如何解讀? 見下解讀。
return 0;
}
function pointer array 代替if else
#include <iostream>
#include <stdio.h>
using namespace std;
void run() {
printf("start\r\n");
}
void stop() {
printf("stop\r\n");
}
void exit() {
printf("exit\r\n");
}
static void (*command[])(void) = {run, stop, exit};
int OnStateChange(int state) {
if (state >= 3) {
printf("Wrong state!\n");
return false;
}
command[state]();
return 0;
}
int main()
{
OnStateChange(0);
return 0;
}
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int *p = &(a + 1)[3];
printf("%d\n", *p);
- 輸出 5 ,因為a+1指向a的第二個元素,[3]表示再向後移動3個元素
- a+1是跳一個int的大小(a想成指標)
- &a+1是跳一整個array的大小
- int var[3] = {10, 100, 200};
- var 是 constant 不能用 var++ 只能 *(var+2) = 500;
0 意見