1樓:天方夜譚的哆啦a夢
intmain(void);
printf("%d,%s\n",bao.id,bao.name);//輸出是4224528,空(應該是null)
//structstudentsbao=;可以。第一種賦值方法
//strcpy(bao.name,"bao");//可以,
//printf("%d,%s\n",bao.id,bao.name);
//bao.name="bao";錯誤「stray'\351'inprogram」其他是亂碼,
//bao.name[0]='a';
//bao.name[0]='/0';
//printf("%d,%s\n",bao.id,bao.name);
/*這樣可以,*/
//chararr[10]="baobao";
////bao.name=arr;//error"assignmenttoexpressionwitharraytype"
//scanf("%s",bao.name);//可以,
//printf("%d,%s\n",bao.id,bao.name);
//所以scanf那一類函式都可以。
//還有就是memcpy函式也是可以的
return0;
擴充套件資料
c語言結構體陣列的直接賦值及陣列的長度計算:
#include
//自定義乙個字串的結構體,包含字串和字串長度兩個變數
typedefstructstrmystr;
//剛開始宣告變數時每個變數的字串長度length都為0
//這裡以長度為10的陣列為例,陣列長度是1000
//對第0個到第9個結構體陣列的長度同時賦值為0
mystrmystr1[10]={
[0...9]={
.length=0,
intmain(){
inti;
for(i=0;i<10;i++){
printf("%d\n",mystr1[i].length);
return0;
2樓:學荷紫詩好
t2.mark=t1.mark;//mark為結構體中的陣列,不能直接賦值??
是的,陣列名是個靜態位址值,不能被修改,如果想把資料儲存到其中,可以用memcpy()函式進行記憶體拷貝,或採用迴圈進行賦值
#include
memcpy(
t2.mark,
t1.mark,
sizeof(t2.mark));
3樓:僕聽雲龐淼
對於已經定義好了的陣列,肯定不能用這樣賦值啦,給結構體賦值其實就跟其他的變數賦值一樣,難道你可以
inta[3];
a=;這個給乙個int陣列賦值嗎,不行啊。
正確的做法就是像其他變數一樣乙個乙個賦值,當然也可在結構體初始化時賦值
c語言中結構體,可以在定義結構體型別的時候,給某些成員賦值不
4樓:兜裡有兩塊糖
在c語言的語法中,這樣不行
如果你需要初始化
可以這樣寫
struct stu student = ;
c語言結構體能否整體賦值
5樓:八哥說科技
可以的,但需要保證是具有相同結構的結構體變數。
可以將乙個結構體變數的值賦給另乙個具有相同結構的結構體變數。如student1和student2都是student型別的變數,可以這樣賦值:student1= student2;
假設申明了兩個成員列表完全一樣的兩個結構體,編譯器會當作兩個完全不同的型別,即使他們的成員列表是一樣的,令兩個結構體的變數間賦值,則是非法的。
6樓:初出茅廬
可以是可以,但它有乙個條件,這裡的賦初值不是想別的資料型別(如 int a;a=5;)它必須是對結構體中的每個成員以此賦值的,你可以從樓上所寫的例子看出這一點。
將乙個結構體變數的值直接賦給另外乙個結構體變數的時候,這兩個結構體必須是相同結構體名。
7樓:六春荷鞏暄
相同型別的結構體是可以直接賦值的,這是ansi/isoc規定的。ansi/iso
c規定的合法行為,編譯器是必須支援的。
但不能進行比較,例如
if(stu[1]
==stu[2])是不允許的。
這種問題不能靠試驗獲得準確的答案,因為你用的編譯器支援並不表明其他編譯器也支援。
8樓:
可以的:
#include "stdio.h"
struct date
d1=;
void main()
9樓:星北城南
結構體可以整體賦值為0,如果要給陣列賦值就比較麻煩,用指標會好一點
c語言結構體中的乙個char陣列怎麼賦值?
10樓:
常用兩種措施:
在宣告結構體變數時初始化,如——
//#include "stdafx.h"//if the vc++6.0, with this line.
#include "stdio.h"
struct stu;
int main(void);//這樣初始化printf("%d %s\n",s.x,s.name);
return 0;
}向陣列裡直接拷貝字串,如——
//#include "stdafx.h"//if the vc++6.0, with this line.
#include "stdio.h"
#include "string.h"
struct stu;
int main(void)
11樓:凌亂心扉
(1)用字元常量逐個初始化陣列。例如:
char a[8]=;
把8個字元依次分別賦給c[0]~c[7]這8個元素。
如果在定義字元陣列時不進行初始化,則陣列中各元素的值是不可預料的。如果花括號中提供的初值個數(即字元個數)大於陣列長度,則出現語法錯誤。
如果初值個數小於陣列長度,則只將這些字元賦給陣列中前面那些元素,其餘的元素自動定為空字元(即'\0')。
如果提供的初值個數與預定的陣列長度相同,在定義時可以省略陣列長度,系統會自動根據初值個數確定陣列長度。
例如:char c=;
這時c陣列的長度自動定為9。也可以定義和初始化乙個二維字元陣列,例如:
char diamond[5][5]=,,,
,};用它代表乙個菱形的平面圖形。
(2)字串常量初始化陣列。例如:
char c=;
可寫為:char c=;
或去掉{}寫為:char c="c program";
注意:此時陣列c的長度不是9,而是10。因為字串常量的最後由系統加上乙個'\0'。上面的初始化與下面的初始化等價。
char c=;
其定義的一般形式是:char陣列名[資料長度]
例如:char c[10];
c[0]='i';c[1]='';c[2]='l';c[3]='o';c[4]='v';c[5]='e';c[6]='';c[7]='y';c[8]='o';c[9]='u';
以上定義了c為字元陣列,包含10個元素。
由於字元型資料是以整數形式(ascii**)存放的,因此也可以用整型陣列來存放字元資料,例如:
int c[10];
但這時每個陣列元素佔2個位元組的記憶體單元,浪費儲存空間。
字元陣列也可以是二維或多維陣列,例如:
char c[5][10];
即為二維字元陣列。
初始化字元陣列的初始化與數值型陣列初始化沒有本質區別。但它除了可以逐個給陣列元素賦予字元外,也可以直接用字串對其初始化。
輸入輸出
字元陣列的輸入
(1)用getchar()或scanf()的'%c'格式符對陣列進行字元賦值。例如,對於陣列a[10]:用getchar()賦值:
for(i=0;i<10;i++)
a=getchar();
用scanf()賦值:
for(i=0;i<10;i++)
scanf("%c",&a);
(2)用scanf()的'%s'格式對陣列賦值。還是對於陣列a[10]:
scanf("%s",a);
或scanf("%s「,&a[0]);
輸入」c program「並回車時,a陣列會自動包含乙個以」\0「結尾的字串」c program「。
字元陣列的輸出
(1)用putchar()或printf()的『%c』格式符對陣列進行字元賦值。例如,對於陣列a[10]:用putchar()賦值:
for(i=0;i<10;i++)
a=putchar();
用printf()賦值:
for(i=0;i<10;i++)
printf("%c",a);
輸出結果為:
c program
(2)用printf()的'%s'格式對陣列賦值。還是對於陣列a[10];
printf("%s",a);
輸出結果為:
c program
12樓:禮浦業雲韶
好吧,比如:
struct
emu=
那麼對char
ch賦值可以
for(j=0;j<=49;j++)
emu.ch[j]=j;
或者乙個字元乙個字元的賦值,比如emu.ch[0]='a';
對字串的賦值不能直接等於,要用函式strcpy,
13樓:匿名使用者
st.name="123"; 非法,常量字串不能直接賦值給字元陣列,因為st.name 位址是確定的,不能再改了。
char name[10]="123";可以的,定義時,進行初始化字元陣列。
14樓:匿名使用者
可以用string.h,標頭檔案裡面的strcpy()函式,拷貝
c語言為什麼結構體宣告的時候可以直接賦值,後面的就不行
15樓:風若遠去何人留
宣告的時候和後續賦值略有不同,在c語言中是兩種處理方法。
如有結構體
struct test
;定義的時候,可以
struct test var = ;
這樣初始化,結果為var.a = 1, var.c = 'c', var.b = 2;
但是如果後續賦值
var = ;
就會報錯。因為在c語言中不支援這種形式的操作。
不過可以取巧轉換一下,改成
var = (struct test);
這樣就可以了。 在這種情況下,系統會申請乙個臨時變數,並初始化為該值,再對var進行賦值。而同型別結構體之間賦值操作是c語言規則允許的。
16樓:匿名使用者
這個涉及到乙個臨時變數的問題,因為後面的a=; 不在結構體定義裡面了,出了這個結構體系統就無法識別了,所以會提示錯誤。
17樓:匿名使用者
你那個第一種做法叫初始化,c語言允許結構體初始化,但不允許第二種那樣賦值
如果你寫
struct student
;struct student a=;
也是對的,這就叫初始化
至於怎麼樣才能做到直接賦值,c語言裡面並沒有這樣的操作過載操作符也是c++裡面的了
不過你可以這樣struct student b=;a=b;
c語言裡面2個結構體之間是可以複製的
或者你也可以定義乙個函式來做,函式體裡面要用挨個賦值的方式希望對你有幫助
結構體型別的長度計算,C語言中結構體陣列長度怎麼計算
計算方法 運算子sizeof可以計算出給定型別的大小,對於32位系統來說,sizeof char 1 sizeof int 4。基本資料型別的大小很好計算,我們來看一下如何計算構造資料型別的大小。c語言中的構造資料型別有三種 陣列 結構體和共用體。陣列是相同型別的元素的集合,只要會計算單個元素的大小...
C語言中指標陣列結構體佇列堆疊變數區別
指標就是指位址 陣列的位址在定義變數時就已經給定了,不能再變化,其大小也是定了的,陣列可以通過下表訪問,這是陣列的方便之處,但是,陣列可能存在越界訪問和浪費空間的問題 結構體就是將以個專案的所有的屬性放在一起,這樣方便操作 佇列有先進先出的原則 堆疊是儲存空間的概念,c語言中的區域性變數就是儲存在棧...
結構體再函式中的作用,c語言中結構體的作用到底是幹什麼的,能通俗點講嗎
結構體和其他型別基礎資料型別一樣,例如int型別,char型別只不過結構體可以做成你想要的資料型別。以方便日後的使用。在專案中,結構體是大量存在的。研發人員常使用結構體來封裝一些屬性來組成新的型別。結構體在函式中的作用不是簡便,其最主要的作用就是封裝。封裝的好處就是可以再次利用。讓使用著不必關係這個...
C語言結構陣列刪除,在C語言中,怎麼刪除乙個結構體陣列中的資料
對於陣列刪除,一般就是使用後面陣列元素前移的操作,來覆蓋前一元素,達到刪除的效果。例如陣列a 10 要刪除a 5 這個元素,那麼只需要把後面的元素前移一位就行了,也就是a 5 a 6 a 6 a 7 a 7 a 8 這樣子a 5 這個元素的內容就會被全部抹殺掉了。不過這裡存在乙個問題,你乙個結構體陣...
c語言中的二維陣列問題,c語言問題 c語言中二維陣列在記憶體中怎樣儲存?
目的是將緩衝區中輸入流中資料清除,可以使用 fflush stdin 清除資料 gets函式會把前面在scanf函式的輸入結束符即回車當做第乙個字串資料的結束符接收,因此不加gets s 就會導致資料個數少乙個。當然使用gets s 會提前接收了回車,因此也是起到同樣的作用。你程式函式中有個錯誤,p...