指標¶
function pointer¶
(*(void(*)())0)()
用途
指向其他的函數 這樣寫只需要一行,缺點一般人看不懂
((void()())dd_prt)()把function pointer 指向其他的函數
1 2 3 4 5 6 7 8 9 10 11 12 | #include <stdio.h> void dd(int a){ printf("%d",a); } int main() { int a=3; void (*dd_prt)(int)=ⅆ//宣告function pointer (*(void(*)())dd_prt)(5566); //^^^^這裡可以寫記憶體位置(所以該位置指向dd function所以我們能操作dd) return 0; } |
lvalue¶
用途
直接改動某個位置的記憶體,變數的數值
1 | *(int32_t * const) (0x67a9) = 0xaa6; |
pointer to pointer **¶
用途
可以讓名稱一樣但指向不同位置
program1
1 2 3 4 5 6 7 8 9 10 11 12 | #include <stdio.h> int b=5278; void func(int **p){ *p=&b; } int main(){ int a=7788; int *name=&a; //^^^名稱都一樣但是可以用func這個函數指向其他變數 func(&name); printf("%d",*name); } |
program2
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <stdio.h> int b=5278; void func(int *name){ *name=b; } int main() { int name=7788; func(&name); printf("%d",name); } |
到底program1和program2有什麼差別?
program1 program2