MDK編譯器 選中乙個變數或者結構體,相同的變數就會顯示相同的底色

時間 2025-01-25 21:10:16

1樓:網友

你好,有方法設定嗎。

mdk 除錯模式下為什麼看不到結構體變數和陣列變數裡的值?

2樓:山水阿銳

您好,這樣的:

位結構是c51語言中的一種特殊結構,可以用於訪問乙個位元組或字的多個位。位結構一般形式如下。

struct 位結構名。

位結構變數;

其中,struct為關鍵字,位結構資料型別必須是整型int(unsigned或signed);整形常熟必須是非負的整數,範圍是0~15,用於表示有多少位,即表示二進位位的個數,變數名是可選項,可以省略。位結構的定義,例項如下。

struct

bit;位結構成員的訪問與結構成員的訪問相同,例如訪問上列位結構中的lbit成員可寫成如下形式。

在使用位結構時,應注意以下幾點。

1、位結構中的成員必須是int,但可以定義為unsigned或者signed。

2、當位結構成員長度為1時,c51語言將其認為是unsigned型別。

3、位結構總長度(位數)是各個位成員定義的位數之和,可以超過兩個位元組。

4、位結構中的成員不能使用陣列和指標,但位結構變數可以是陣列和指標。如果是指標,其成員訪問方式同結構指標。

5、位結構可以成為巢狀式結構的成員,與其他結構成員一起使用,示例如下。

struct student;

結構體變數與結構體成員能同名嗎?

3樓:曉風殘狼

結構體,在c++中,是乙個類而已。所以,不管是類,還是結構體,它產生的物件名,其實是可以與成員同名的。

所以a是錯的。而b和c,因為編譯器根本不會為結構體分配記憶體,而只是為結構體變數分配記憶體。

例如:struct student

void main()

而d選項,st根本不是外部的結構體。

所以這道題應該沒有正確答案。

做題,其實沒有實際意義,只有實際去程式設計才有意義。

4樓:匿名使用者

我和你想法一樣,這個寫法應該是可以的。

曉風殘狼 朋友,你對b的解釋不太明白,你用 &student是錯誤的來證明struct不會分配記憶體,那難道說如果student是乙個類,就可以寫這種語法嗎?據我所知,c++中struct和class的區別僅在於預設的訪問許可權,那麼在分配記憶體的說法上,應該是不會有差異的。請指教。

c語言 結構體變數的首位址是什麼??作用是?

5樓:風若遠去何人留

結構體變數的首位址,是指結構體變數在記憶體儲存中,起始的位址值。在c語言中,對於任意的結構體變數a,可以通過&a來獲取首位址。

結構體的首位址是為c語言中的特殊型別指標變數服務的。

指標變數儲存的實際值即為位址,所以對指標變數賦值時,常見的方式就是。

p = &a;

6樓:有錢買不起房子

#include

int main()

struct node

int data;

struct node *next;

snode;

struct node *p;

p=&snode;

return 0;

上面定義了乙個單連結串列結構體。

node,它有2個變數,其中p就是指標變數。

p=&snode就是讓指標p指向結構體snode的首位址,這樣p就能對snode的元素data進行操作。

如p->data=5

7樓:網友

首位址是結構體第乙個成員所佔的第乙個記憶體單元的位址。作用當然是讓編譯系統能找到結構體資料在記憶體中的位置啦!

8樓:網友

此結構體變數佔用記憶體的第乙個位址被稱為這個結構體變數的首位址。它標識了這個結構體變數的位置。可以把他賦給乙個此結構體型別的指標,從而可以通過這個指標操縱結構體中的資料。

樓上舉得例子很好,是在定義結構體的時候就順便初始化了乙個struct node(此結構型別)的變數——snode。然後宣告瞭乙個struct node(此結構型別)的指標,並通過取位址符把snode的首位址賦予此指標……

其實一行**就可以完成以上操作——

struct node *p=new struct node

同樣的結構體,因為變數的定義順序不一樣,造成資料長度不一樣?求解

9樓:ali_煙滅

這涉及到偏移量的問題,首先我們需要懂得一些概念。

在編譯**的時候,編譯器儲存結構體時會遵循兩個原則。

1、結構體中成員的偏移量必須是成員對應的變數型別大小的整數倍(0預設是所有變數大小的整數倍)

2、結構體的大小必須是所有成員對應的變數型別大小的整數倍。

依照這兩個原則來做一下上題。

gs1的char陣列的偏移量是0(結構體開始成員偏移量一般都是0),依照原則1,0是char的整數倍,然後下乙個成員double的偏移量=上乙個成員的偏移量+上乙個成員的大小,即double偏移量=0+18=18,顯然18不是double大小(8)的整數倍,那麼編譯器會偷偷在前乙個變數的後面補上幾個位元組變成下乙個變數大小的整數倍,18離double大小(8)最近的整數倍是24,那麼就是要補6個位元組,即double的偏移量=0+18+6=24,符合原則1,那麼再看下乙個成員 int的偏移量=24(double的偏移量)+8(double的大小)=32,結構體大小參照原則2括號內容即是32+4=36,但是36並不是double大小(8)的整數倍,所以要補4個位元組,即結構體大小變為40個位元組,符合原則1和原則2,因此gs1的大小為40。

gs2第乙個成員char的偏移量如gs1中的char一樣也是0;那麼下乙個成員int的偏移量=18(上乙個成員的大小)+0(上乙個成員的偏移量)=18,但是18不是4的整數倍,因此編譯器又得偷偷的在前面補上2個位元組,所以int的偏移量就是20(18+2=20);最後乙個成員double的偏移量=20+4=24,符合原則1,那麼結構體的大小就是24+8=32,符合原則1和原則2

所以gs1大小就是40,gs2大小就是32(解釋大半天真費勁~)

可能你們會有疑問32和40明明不是陣列大小的整數倍,但你們看清楚原則2(敲黑板!是變數型別的大小,陣列是char型別的,那麼任何整數都是1的整數倍(體育老師有教過吧)

10樓:小鬍子_大叔

一、結構體變數中成員的偏移量必須是成員大小的整數倍(0被認為是任何數的整數倍)

二、結構體大小必須是所有成員大小的整數倍。

c語言結構體能否整體賦值

11樓:八哥說科技

可以的,但需要保證是具有相同結構的結構體變數。

可以將乙個結構體變數的值賦給另乙個具有相同結構的結構體變數。如student1和student2都是student型別的變數,可以這樣賦值:student1= student2;

假設申明瞭兩個成員列表完全一樣的兩個結構體,編譯器會當作兩個完全不同的型別,即使他們的成員列表是一樣的,令兩個結構體的變數間賦值,則是非法的。

12樓:初出茅廬

可以是可以,但它有乙個條件,這裡的賦初值不是想別的資料型別(如 int a;a=5;)它必須是對結構體中的每個成員以此賦值的,你可以從樓上所寫的例子看出這一點。

將乙個結構體變數的值直接賦給另外乙個結構體變數的時候,這兩個結構體必須是相同結構體名。

13樓:六春荷鞏暄

相同型別的結構體是可以直接賦值的,這是ansi/isoc規定的。ansi/iso

c規定的合法行為,編譯器是必須支援的。

但不能進行比較,例如。

if(stu[1]

stu[2])是不允許的。

這種問題不能靠試驗獲得準確的答案,因為你用的編譯器支援並不表明其他編譯器也支援。

14樓:星北城南

結構體可以整體賦值為0,如果要給陣列賦值就比較麻煩,用指標會好一點。

」結構體定義時,結構體本身並不佔用儲存空間,系統並不給結構體分配儲存空間。「這句話是對的嗎?

15樓:加百列

對的,結構體型別的定義只是告訴編譯器該如何表示資料,但是它沒有讓計算機為其分配空間。結構體型別的定義就是結構體的宣告,不管是定義還是申明,這句話都是正確的。

只有在結構體變數,宣告的時候可以分配。要使用結構體,那麼就需要建立變數,也就是結構體變數。

建立乙個結構體變數:struct book library看到這條指令,編譯器才會建立乙個結構體變數library,此時編譯器才會按照book模板為該變數分配記憶體空間,並且這裡儲存空間都是以這個變數結合在一起的。

同時後面訪問結構體變數成員的時候,就要用到結構體變數名來訪問。

16樓:程式設計大亨

要想知道在何時分配記憶體空間,首先要知道,定義和宣告的含義。定義就是具有以下明確的格式,如:連線說明符 型別說明符 變數名;而宣告則比較複雜,宣告包括型別的宣告,變數的宣告等等。

而定義乙個結構體一般是不分配記憶體,宣告乙個結構體變數是分配記憶體的。

c語言結構體變數名和結構體型別可以重名嗎?

17樓:網友

這顯然是不可以的。變數名不能和任何型別名相同,包括自定義的類或者結構體型別。

18樓:網友

我在vs2008上試了一下,貌似可以,其他編譯器就不知道了。

19樓:網友

不行,編譯不會通過。。。

20樓:謙兒哥

struct str

struct str str; 可以來自typedef struct str

str;str str;

自己復bai制du編zhi譯dao

c 編譯報錯,關於C 編譯錯誤的乙個問題

那個 p不能用 類的private成員 不能你這麼初始化的 include using namespace std class time void settime int h,int m,int s error1 少 void time settime int h,int m,int s error...

關於高中乙個物理問題

物體在圓盤上隨著圓盤做勻速圓周運動。有運動必然有力,因為力是改變物體運動的原因,在圓盤的水平面上必然有乙個力改變物理運動的方向 勻速圓周運動物體的方向在改變 在粗糙的水平面上,物體運動受到摩擦力。若沒有摩擦力,物體則不會運動,一直靜止。為什麼指向圓心?勻速圓周運動指的是速度大小不變,而方向在改變,運...

matlab中函式運算,matlab中一個函式運算

張慶 a 0.4,0.2,5.5,9.17,14.13,17.53,15.03,11,1.03,0.5,2.06,6.03,10.17,14.73,20.63,25.23,29 b 98,97.73,96.3,91.67,91.23,87.43,81.3,78.17,78.17,70.67,67.9...