1樓:
#define是字串替換,#define fix_long(x) (*(unsigned *)&(x)= swap_4(*(unsigned *)&(x)))就是在**中寫fix_long(x)就等於寫了(*(unsigned *)&(x)= swap_4(*(unsigned *)&(x)))。這個表示式的意思是將值x的位址強制為unsigned int*型指標再取其內容作為函式swap_4的實參,經函式swap_4操作後將其返回值賦給經位址強制轉換後的變數x。第二個問題就是經#definefix_float(x) fix_long(x)後,**中寫中寫fix_float(x)和寫fix_long(x)效果是一樣的,也就是寫fix_float(x)的意思也是(*(unsigned *)&(x)= swap_4(*(unsigned *)&(x)))了。
供參考……
2樓:匿名使用者
1,fix_long(x) 把4位元組的數交換位元組順序,可能有的系統有不同的要求。
例如: x=0x10203040 (16進製制,很容易看出來)fix_long(x); 執行後,x==0x40302010;
2,就是你說的
c語言#define問題
3樓:匿名使用者
#include
#define da 9
#define db (da)*10
//巨集尾不需要加分號
int main()
c語言中 取內容與取位址運算子的問題
4樓:匿名使用者
我明白你什麼意思,指標的概念確實不好理解!
1,先給你說下指標,你把指標理解了運算子的抵消就明白一半了!
指標裡面是儲存的記憶體位址(就像int變數裡面儲存的是整型變數乙個意思)。
整型變數儲存在記憶體裡面,我可以通過這個變數名稱來呼叫這個資料,也可以通過指標裡面這個變數的位址加上*(間接訪問運算子),來呼叫這個資料。
2,再說下運算子*和&
*是間接訪問運算子:就是可以通過位址,找到這個位址裡面的變數,所以 *p1 就等同於變數a
&是求位址運算子:就是將變數所在的記憶體位址,提取出來
這兩個運算子的運算等級是相同的,也就是說誰距離變數近,就誰先。所以*&a和*(&a)是一樣的,都是先取位址,在對位址進行間接訪問。但是一定要注意*與&的順序,&*a是無效的。
3,再說下題
*運算子就是對位址進行操作的,那麼 *位址 的意思就是訪問位址裡面的資料,而&a就是取變數a的位址,所以*&a: 先取變數a的位址 再 對位址進行間接訪問,兩個操作就相互抵消了,最後還是變數a。
4,還有什麼不明白的麼?
5樓:小山山
* 的優先順序大於&,所以取值必須在& a加括號,不然會無意義
6樓:匿名使用者
詳細點兒,看不懂你什麼意思...
把規範的寫出來...
如果是這樣,這個賦值確實沒什麼意義...
c語言關於取位址符的問題。
7樓:豬頭或火寶寶
你好!!
1.位址就像你家的位址一樣,指標變數存放的就是你家的位址,要想到你家,必須找到存放你家位址的變數(針對指標而言),那就是指標。
2.要是變數是整型不是字串陣列名,那就的帶取位址符!!!
3.& 是取位址符的,(但還有位於運算),要是需要變數的位址就要加取位址符。
不理解,我們在交流!!!
8樓:
1通俗說的 c語言的位址 就是你家街道的門牌號 送信的不會通過你的名字找到你 而是門牌號
2.必須要用 不可以去掉 它就是郵遞員
3.情況很多 慢慢體會
9樓:匿名使用者
位址就是指記憶體中存放資料的位址,就像你家的門牌號一樣。
scanf("",位址列表)這個函式要求的第二個引數就是需要乙個位址,如果你是字元陣列名,就可以不用&,因為陣列名就是位址。
&後面必須跟變數名。
c語言#define問題
10樓:匿名使用者
巨集替換,定義乙個m巨集,這個巨集有乙個引數n,預編譯時會把你的巨集替換成你定義的運算,引數會用你提供的引數,如x=2*(n+m(2));替換後就是,x=x*(3+(3+1)*2);
11樓:匿名使用者
巨集分為有引數的和不帶引數的巨集。
#define n 3是不帶引數的巨集
#define m(n) (n+1)*n是帶引數的巨集,待引數的巨集和函式的功能有點類似,但是它不是函式,在編譯之前已經被替換為對應的實際**。
12樓:匿名使用者
#define 這個是巨集定義,比如#define n 3,它的意思就是給3起了乙個外號,外號就叫n,
#define m(n) (n+1)*n 這個的意思就是(n+1)*n的外號就是m(n),這裡面n是需要你賦值的。
巨集定義就可以看做n=3,m(n)=(n+1)*n
13樓:匿名使用者
巨集定義的時候,編譯器是直接把變數替換成引數
m(2) = (n+1)*2
14樓:戶順閃代桃
ctrl+z
組合鍵就是
eof.
c系統裡定義了
eof--
(end
offile)
見#define
eof(-1)
所以加不加
巨集定義語句:
#define
eof-1
是一樣的。
當讀到檔案結束時,許多輸入函式
都會送返
eof也就是return
-1.鍵盤輸入
用:while
(scanf("...",...)
!=eof);
或if(scanf("...",...)
==eof
)goto
lab_finish;
控制都可以。
scanf("...",...)
括號裡讀什麼都可以,%d
%f..都可以,一旦
ctrl+z,
就會得到
eof。是
scanf()函式的返回值,不是括號裡的引數返回值。
c語言 define值的問題
15樓:匿名使用者
#define s 3;
會導致編譯時將所有的s全替換成「3;」了
巨集定義時,不要帶;結尾
去掉分號,改成:
#define s 3
也可以這樣改一下:
const int s=3;
16樓:
你把#define後面的分號刪掉就可以通過了
寫成#define s 3
在c或c++語言源程式中允許用乙個識別符號來表示乙個字串,稱為「巨集」。被定義為「巨集」的識別符號稱為「巨集名」。在編譯預處理時,對程式中所有出現的「巨集名」,都用巨集定義中的字串去代換,這稱為「巨集代換」或「巨集」。
巨集定義是由源程式中的巨集定義命令完成的。巨集代換是由預處理程式自動完成的。
17樓:
#define s 3;
改成#define s 3
也就是去掉3後面的分號
#define epxl 1e-12;
一樣因為在此處#define只作簡單的字元替換#define s 3;
將後面出現s的地方換成3; 所以會出錯
c語言乙個巨集#define的問題
18樓:
1、如上回答,巨集定義是替換void vfunction( void *pvparameters ) __attribute__((noreturn))
2、__attribute__關鍵字主要是用來在函式或資料宣告中設定其屬性。給函式賦給屬性的主要目的 在於讓編譯器進行優化。
3、函式宣告中的__attribute__((noreturn)),就是告訴編譯器這個函式不會返回給呼叫者,以便編譯器在優化時去掉不必要的函式返回**。
19樓:匿名使用者
巨集定義,是等價替換的意思,這樣等價代替可以省去很多字元。
20樓:黃石佳誠家電維修
__attribute__((noreturn))
應該是位址吧
21樓:恕本如心
用porttask_function_proto( vfunction, pvparameters )
代替void vfunction( void *pvparameters ) __attribute__((noreturn))
C語言 陣列的值是位址
說的有點亂呢 陣列指標 他是乙個指標,指向乙個陣列 指標陣列 他是乙個陣列,陣列存放的元素是指標 不對,陣列的位址等於首元素的位址 陣列有值,其為首元素的位址 是不對的。陣列是一組有序資料的集合,陣列中的每乙個資料都屬於同乙個資料型別,並且按順序存放在乙個連續的儲存空間中,即最低的位址存放第乙個元素...
為什麼C語言這麼火就C語言的歷史以及今天的用途
其實c語言用的並不多,並且我們學都是已經過時了的東西,但是c語言上的程式設計思想值得我們去學習,只要看得懂c語言,別的程式語言自學都不是問題,c語言是基礎,沒有這個基礎,什麼程式設計都變得相當難理解,更別說自學了,所以c語言才這麼火 就如英語一樣,很多個它都可以通用的。c語言有很多庫函式,是結構語言...
請教c語言關於位址的輸出問題,請教C語言關於位址的輸出問題
孤狼騰龍 第乙個 printf p a 這是輸出a的值 printf p a 這是主輸出存放a值的位址 第二個 如果填b輸出的是a的位址 要輸出指標變數b的位址就直接printf p b 第三個 scanf d a 這是賦值語句,就是將輸入的數字存放在位址a中 記住有 符號,表示位址 牧蕙蘭 第乙個...
c語言把結構體陣列的位址賦給指標
1 結構體指標其實是乙個指標,它儲存的是指向某個結構體的 位址 所以結構體指標陣列儲存的其實是指向一組結構體的 位址 陣列,它本身並不包含結構體的具體內容 沒有被分配記憶體 2 所以當用到他們時,要麼重定向,比如 d b 讓d指向b,d儲存的是b的位址,這樣就能通過d來呼叫b了 要麼用malloc為...
關於c語言中給絕對位址的賦值問題
你這個表示式 unsigned int 0x100000 0x3322是錯誤的,不存在這種寫法 這個符號,只能對變數使用,還有等號左邊,型別轉換是非法的 你的想法是對的。不知道你在哪看的資料,資料上的不對,左值為常量,不能賦值。你說的很對,完全正確。看來你對基礎概念理解的很透。型別轉換的結果不是左值...