為什么要用指定的內存地址執行程序。
成都創新互聯公司主要從事成都做網站、成都網站建設、網頁設計、企業做網站、公司建網站等業務。立足成都服務阜寧,10年網站建設經驗,價格優惠、服務專業,歡迎來電咨詢建站服務:18982081108
當然,c語言被編譯連接后肯定都是一條一條的指令。也肯定是存在內存中的。
那么如果你是想跳到其他的程序的指令。那么你的需求是有用的。
可是,很不幸。這樣的話,操作系統是不允許的,會報異常的。屬于內存越界錯誤,很明顯你創建的程序是無法訪問其他程序的指令的。
其次,如果你只是想跳到本身的c語言的某條指令的話。使用goto語句就可以實現。雖然是不鼓勵的。其次,規范好你的算法實現。用循環和判斷完全能夠實現。如果那條指令是匯編編寫的程序的話。你也可以在c中嵌套匯編語言,jump到該指令。如果是匯編有關的話,跳轉指令應該經常會用的吧。
你需要的這個函數,C語言本來就有:memcpy
void *memcpy(void *dest, const void *src, size_t n);
函數的功能是從源src所指的內存地址的起始位置開始拷貝n個字節到目標dest所指的內存地址的起始位置中。
舉個例子:將s中的字符串復制到字符數組d中。
#includestdio.h?
#includestring.h?
int?main()?
{?
char*s="GoldenGlobalView";?
chard[20];?
memcpy(d,s,(strlen(s)+1));?
printf("%s",d);?
getchar();?
return0;?
}
#include stdio.h
void f()
{
}
void main()
{
printf("%u\n", f);
printf("%u\n", f);
printf("%p\n", f);
}
主函數中前兩行%u表示輸出無符號的十進制,而第三行%p表示輸出地址,其結果是一個十六進制的數,你將其轉換成十進制,你會發現與前兩行結果一樣。
這太簡單了, 函數指針就搞定.
但是一定要確定函數的返回值與參數.
比如說有一個函數定義: int func(int i);
則就要這樣:
int (*p)(int i);
scanf("%p", p);
p(10);
據我所知,創建數組需要2個參數,1是地址,2是分配空間。空間分配是不能重復的,也就是說創建2個數組,這兩個數組是不可能重合的,為了防止這種事情出現,所以不能指定地址。而是編譯器自動分配,不能人為。
但是可以省去分配空間這個步驟,而是只創建地址,這就是指針的概念。比如int a[12],你若是想創建另一個代替a[12],可以int *p=a;這樣,p的值就是a數組的首地址了。int *p =(int*)0x80000;意思就是p[0]的地址是0x80000,創建的時候要確定(int*)0x80000已經分配過了,可以使用了,不然就相當于野指針,容易出錯。
新聞名稱:c語言函數指定地址 c語言中函數名是地址嗎
當前鏈接:http://m.newbst.com/article8/doojeip.html
成都網站建設公司_創新互聯,為您提供服務器托管、網站維護、網站排名、云服務器、營銷型網站建設、企業建站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯