簡體   English   中英

我可以改變指針的功能嗎?

[英]I can change the pointer's function?

在腳本語言中,例如Perl和Python,我可以在運行時更改函數。 我可以通過將指針更改為函數來在C中執行某些操作嗎?

就像是:

void fun1() {
    printf("fun1\n");
}

void fun2() {
    printf("fun2\n");
}

int main() {
    fun1 = &fun2;
    fun1(); // print "fun2"
    return 0;
}

是; 你可以,這是一個簡單的程序,可以幫助你理解這一點

 #include <stdio.h>
 void fun1() {
    printf("fun1\n");
 }

 void fun2() {
    printf("fun2\n");
 }

 int main() {
       void (*fun)() = &fun1;
       fun(); // print "fun1"
       fun = &fun2;
       fun(); // print "fun2"
       return 0; 
 }

產量

➤ ./a.exe
fun1
fun2

你不能改變fun1,但你可以聲明一個函數指針(不是函數,只是指向函數的指針)。

void (*fun)();
fun = fun1;
fun(); /* calls fun1 */
fun = fun2;
fun(); /* calls fun2 */

您可能已經注意到沒有必要明確地獲取fun1 / fun2的地址,您可以省略運算符'&'的地址。

你不能這樣做。

您可以將fun1視為該函數的固定入口點的占位符。

你正在尋找的語義來自fun1=&fun2; 指向fun1每次調用都會導致調用fun2

fun1是一個值而不是一個變量。 在語句int x=1;以相同的方式int x=1; x是變量, 1是值。

你的代碼沒有比思考1=2;更有意義了1=2; 將編譯並從那一點開始x=x+1; 將導致x增加2。

僅僅因為fun1是一個標識符並不意味着它是一個變量,更不用說可分配了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM