-
idata:定義的變數在 00 h ffh ram 和 256 位元組的範圍內,可以讀寫變數。
xdata:在擴充套件的外部儲存中定義乙個變數,範圍為 64KB,該變數可以讀寫。 int xdata i 和 int idata i 之間的區別:
int xdata i ;I 片外RAM存放在片外RAM中,片外RAM最高支援64KB,通過資料線D0 D7和位址線A0 A15訪問,不是ROM!! int idata i ;儲存在晶元內的RAM區域,範圍為256B。 因此,這兩個我與ROM和EEPOM無關!!
-
51 MCU 定義了 idata 和 xdata 的大陣列 idata 和 xdata 的區別在於:空間不同、訪問方式不同、採集方式不同。
首先,空間不同。
1. iData:iData占用51個微控制器內部RAM的固定0x00 0xff空間。
2. XDatData:XData占用MCU的51個外部RAM擴充套件的0x0000 0xffff空間。
第二,訪問不同。
1. iData:iData 的訪問方式與 C 中的指標類似。
2. xdata:xdata 由 DPTR 訪問。
3. 與眾不同。
1.idata:51微控制器編譯成功後,可以在idata區域直接獲取定義的陣列。
2. xdata:51微控制器編譯成功後,無法直接在xdata區域獲取定義的陣列。
-
儲存區域不同。
iData 存在於內部 RAM 80h--ffh 中(不能直接定址用於彙編指令,只能間接定址)。
XData是外部RAM的存在,一些微控制器會在晶元中擴充套件一些RAM,這部分也使用XDATA,因為它是用外部RAM定址的,而MOVX是用來在彙編指令中定址的。
-
區別如下:1.不同位置 iData在128位元組的高容量中定義,XData在外部RAM中定義,一些微控制器在內部整合了外部RAM。
2.訪問速度不一樣 訪問idata的速度略快。
3. 最後,可能也是最重要的一點,兩者在初始化方面有很大不同。
基本上在所有編譯器下,unsigned char idata num[3]=; 它可以正確編譯,在 idata 區域,您可以看到陣列。
但是無符號字元 xdata num[3]=,在某些編譯器下,在 xdata 中,陣列是不可見的,程式可能無法正常執行。
-
乙個是內部RAM,另乙個是外部擴充套件RAM
-
idata 是間接定址的。
xdata 外部位址。
-
1.作用機制不同
資料:直接定址的片上RAM區域低128b(00h 7fh)。
idata::微控制器間接訪問的片上RAM區域,允許訪問所有片上RAM。
2、使用方向不同:
資料:計算機中的程式、文件、數字、影象、聲音等資訊。
iData:iData 是 51 系列微控制器認可的儲存器型別之一,它指的是前 0x00-0xff 中 256 位元組的片上 RAM,其中前 128 位元組與 128 位元組的 Data 完全相同,只是因為訪問方式不同。
-
不要拿出這種問題問它,自己閱讀 C51 書。
-
它對計算機沒有區別。
無論您使用 <=9 還是 <10 取決於您使用它的上下文,最直接、易於閱讀的程式占上風。
例如:要迴圈 10 次,您可以編寫:"for (int i = 0; i < 10; i++)"它也可以寫成"for (int i = 0; i <= 9; i++"。
顯然,後者在一定時間後閱讀程式時很容易誤解他人甚至自己。
-
沒有區別,整數 i 只能取 1-9
-
因為 your i 是 int 型別,所以兩個公式之間沒有區別。
-
就我個人而言,我認為沒有區別,有時我使用 <=,有時我使用 <
-
完全相同,沒有任何區別。
-
有區別,可以編制比較。
-
int 整數和小數之間沒有區別。
-
int i,j,*p=i 是將 i 的值賦給指標 p 原來的 p 位址不變 int i,j,*p=&i 是將 i 的值和位址賦給 p 並更改位址。
-
房東,概念不明確。
p 定義為指標型別,使用時表示取消引用 &i,表示變數 i 的位址 int *p=&i; 這意味著在定義指標變數時,將 i 的位址分配給 pint *p=i; 這意味著儲存在 i 中的內容被分配給 p 作為位址
-
你弄錯了,第一次用法通常是錯誤的。 此時,*p 不知道它指的是什麼,可能會導致程式崩潰。
第二種型別的 *p 取 i 的內容。
-
這兩者都是陣列的形式。
-
兩者都可以,前者 i 在 for 迴圈之外定義,那麼 i 的值一直存在到程式結束,i 占用的記憶體空間直到程式結束才釋放; 後者的 i 是在 for 迴圈中定義的,因此當 for 迴圈結束時,i 占用的記憶體空間被釋放。 一般推薦後一種方法,因為當程式較大時,前者占用的記憶體較多,因此程式在執行時對CPU的負載較大,記憶體溢位的風險較大。
-
簡單地說,當第乙個迴圈結束時,我的空間沒有被釋放,我還活著。 在第二個迴圈結束時,i 的空間被釋放。
-
首先,C 必須將定義放在第一位,這是不正確的,但 C++ 允許將定義放在第一位。
有區別,前者的壽命我不僅在for,而且在外面for,而後者的壽命i只在for,看乙個簡單的例子。
int i;
for (i = 0;;)
如果 (i == 10) 是正確的,因為我在外面有一輩子。
for (j = 0;;)
if (j == 10) 因為 j 在 for 中有乙個生存期。
-
可以說沒有區別,但標準要求是 int *a 接近變數;
int* a;兩種含義相同,但通常會選擇第乙個。
如果定義了 int *a,b; 在本例中,第乙個 a 是指標,第二個是變數。
如果定義為 int* a,b; 這更不清楚。
-
沒有區別,但一般首選是 int *。
-
如果它沒有影響,那有什麼問題? 問題一定不在*的位置! 新增到問題中。
重新註冊使用者可能是乙個情況)。
也就是說,如果要定義兩個指標,則只能定義以下指標之一:
int *a,b;相當於 int *a; int b;
int* a,b;相當於 int *a,b;
以下可以:
int *a,*b;
int* a, *b;
int *a;int *b;
int* a;int* b;
-
* 的位置對宣告變數沒有影響!
-
沒有區別。
但我更傾向於把它寫成 int*;
讓我們向 LZ 展示幾個示例。
int p;
int* p;
int** p;
int***p;
第乙個是容易理解的,它是一種int型別的資料;
第二個也很好理解,是int*型別的資料,是乙個指標,乙個儲存位址,點是int型別,即指向乙個整數資料;
第三種是int**型別的資料,是指向指標的指標,儲存位址指向int*型別,即指向指標(int*); //
第四個,同樣可以推導出來,是指向乙個指標的指標,該指標儲存位址並指向 int** 指向指標的指標。
當您想檢視它指向的類型別時,可以刪除 *。
因此,建議使用 int*p; 您可以理解 int* 是一種型別,而 int** 是另一種型別。
-
沒有區別,也沒有效果,主要是為了讓人們更容易理解。
乍一看,int* 很容易理解 * 和 int 是乙個整體,但實際上 * 應該是乙個整體,後面的變數名。
例如,我想定義兩個 int 指標變數 A 和 B
int* a,b;
int* a,*b;
int *a,b;
int *a,*b;
這四種情況是有對有錯的,第一種和第三種情況是一樣的,第二種和第四種情況是一樣的,但從文字上看,很容易理解第一種和第四種情況是一樣的。
因此,寫作習慣非常重要。
-
不知道房東問了什麼問題,房東把問題說清楚了!!
-
沒有影響,你把它放在哪裡並不重要。
控制EEPROM接入的EEC暫存器距離bank1位址40h,因此需要進行bank切換,使用mp1的間接定址來正確設定位狀態。 >>>More
你能說清楚嗎,我不知道你的意思。 是否要在 main 函式中呼叫乙個函式,然後不知道如何定義被呼叫的函式? 如果是這樣的話,我可以告訴你。 >>>More
親愛的,您好,很高興為您解答基於51微控制器的電子密碼鎖的理論基礎:51微控制器是一種廣泛應用於嵌入式系統和物聯網等領域的微控制器。 電子密碼鎖是一種常見的電子安全鎖,它使用數字程式碼代替傳統的機械鎖芯,以提供更大的安全性和便利性。 >>>More
在C++中儲存負數時,符號位置不是簡單的1,而是以補碼的形式,負數的最高位數是符號位,即1,其餘全部反轉,然後加1。 >>>More