指標

你所不知道的C語言-學習筆記


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)=&dd;//宣告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


評論