當前位置:首頁 » 編程語言 » c語言中結構體賦值

c語言中結構體賦值

發布時間: 2022-08-26 18:31:44

c語言如何為結構體中的某個屬性賦值

C語言中,數組間不能相互賦值——這是歷史遺留問題,當年在B語言中,數組名和指針名是沒有區別的(除了數組名定義時自動為數組分配內存),數組名可以指向別的對象或數組。換句話說,數組名之間的賦值是淺賦值。後來C語言的設計者發現這種規則在C語言行不通,但是C語言的設計者又不想破壞對B語言的兼容性,於是就乾脆禁止了數組間的賦值(這樣B語言程序員在C語言中嘗試「數組間淺賦值」的時候就會得到明確的報錯)。後來B語言退出歷史舞台,而C語言的這種設計卻一直保留下來,遺臭萬年……
字元數組間的賦值需要用
strcpy
或(如果知道數組長度)
memcpy。在這個例子中strcpy(s1.ch,"this");是標准做法。不用擔心性能損失,現代編譯器都把
strcpy
作為內置過程,可以保證和匯編一樣高效(甚至更高效)

㈡ C語言,結構體中的數組怎麼賦值,

(1)用字元常量逐個初始化數組。例如:

char a[8]={'i','l','o','v','e','y','o','u'};

把8個字元依次分別賦給c[0]~c[7]這8個元素。

如果在定義字元數組時不進行初始化,則數組中各元素的值是不可預料的。如果花括弧中提供的初值個數(即字元個數)大於數組長度,則出現語法錯誤。

如果初值個數小於數組長度,則只將這些字元賦給數組中前面那些元素,其餘的元素自動定為空字元(即'')。

如果提供的初值個數與預定的數組長度相同,在定義時可以省略數組長度,系統會自動根據初值個數確定數組長度。

例如:char c[]={『c』,『』,『p』,『r』,『o','g','r','a','m'};

這時c數組的長度自動定為9。也可以定義和初始化一個二維字元數組,例如:

char diamond[5][5]={{'','','#'},{'','#','','#'},{'#','','','','#'},

{'','#','','#'},{'','','#'}};用它代表一個菱形的平面圖形。

(2)字元串常量初始化數組。例如:

char c[]={『c』,『』,『p』,『r』,『o','g','r','a','m'};

可寫為:char c[]={"C program"};

或去掉{}寫為:char c[]="C program";

注意:此時數組c的長度不是9,而是10。因為字元串常量的最後由系統加上一個''。上面的初始化與下面的初始化等價。

char c[]={『c』,『』,『p』,『r』,『o','g','r','a','m',''};

(2)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<i>=getchar();

用scanf()賦值:

for(i=0;i<10;i++)

scanf("%c",&a<i>);

(2)用scanf()的'%s'格式對數組賦值。還是對於數組a[10]:

scanf("%s",a);

scanf("%s「,&a[0]);

輸入」C program「並回車時,a數組會自動包含一個以」「結尾的字元串」C program「。

字元數組的輸出

(1)用putchar()或printf()的『%c』格式符對數組進行字元賦值。例如,對於數組a[10]:用putchar()賦值:

for(i=0;i<10;i++)

a<i>=putchar();

用printf()賦值:

for(i=0;i<10;i++)

printf("%c",a<i>);

輸出結果為:

c program

(2)用printf()的'%s'格式對數組賦值。還是對於數組a[10];

printf("%s",a);

輸出結果為:

c program

㈢ C語言結構體賦值

str *st; 這是定義一個指針,但沒有給指針分配具體的內存空間

(*st).age= 1; 對一個沒有指定內存空間的指針採用*操作,會導致程序「迷惘」而異常退出!

str st1; 這里定義的是一個結構體變數,有自己的存儲空間
st1.age= 1; 這是正常的結構體元素賦值!當然是正常的

㈣ C語言中 關於結構體對象賦值的問題

結構體
直接直接賦值,是一種淺Copy,也即是說,原有變數的內容直接按照二進制形式就過來了,兩個結構體變數的內容是一模一樣的;
萬一結構體中存在
指針變數
,那麼這個指針就有了兩份Copy,應用起來就很危險了;
所以一般在只有普通變數的時候才使用淺Copy,如果存在指針,那麼這種就不再可行,需要定製才可以保證安全。

㈤ 結構體賦值是多少

C語言中的結構體變數可以用另一個變數對其進行賦值或初始化。

簡單結構體(不包含指針成員)直接賦值沒有問題。但是稍微復雜一點的結構體裡面會有指針成員,那麼以上的淺拷貝則會有問題。

賦值會直接將結構體的指針變數被賦值,賦值之前其所指向的內存單元丟失,賦值之後若該指針指向的內存單元被其它指針釋放掉,那麼繼續使用該成員指針的話則有可能導致內存泄漏。

概述:

在C語言中,結構體(struct)指的是一種數據結構,是C語言中聚合數據類型(aggregate data type)的一類。結構體可以被聲明為變數、指針或數組等,用以實現較復雜的數據結構。

結構體同時也是一些元素的集合,這些元素稱為結構體的成員(member),且這些成員可以為不同的類型,成員一般用名字訪問

C++提供了許多種基本的數據類型(如int、float、double、char等)供用戶使用。但是由於程序需要處理的問題往往比較復雜,而且呈多樣化,已有的數據類型顯得不能滿足使用要求。

㈥ c語言中結構體賦值問題

printf("%s")函數接受字元串是用空格做結束符的,不能通過改變輸入來正確接收。建議使用gets()函數來接受帶有空格的字元串。還有就是字元的接收,如果此次接收字元之前有字元輸入,要在之前清空一次輸入緩沖區或者用getchar()把控制字元清楚掉。同時要消除本次輸入帶來的控制字元。

㈦ 在C語言中。結構體變數之間可以相互賦值嗎

可以直接賦值。定義結構體類型,然後用這個類型定義出來的變數就是結構體變數。

C語言在相同類型的變數間賦值時是直接內存復制的,即將他們的內存進行復制,這里因為同樣結構體變數,屬於同一種變數,所以賦值時是按照他們的內存分布來直接拷貝的。

舉例:

voidmain()

STUstu1={0,10};

STUtemp={12,88};

STU*p1=&stu1;

STU*p2=&temp;

printf("%d-%d\n",temp.name,temp.num);

temp=stu1;

printf("%d-%d\n",temp.name,temp.num);

temp={10,10};

printf("%d-%d\n",stu1->name,stu1->num);

printf("%ld-\n",&stu1);

printf("%ld-\n",stu1);

printf("%ld-\n",&temp);

printf("%ld-\n",temp);

change(stu1,temp);

temp=stu1;

p2=p1;

printf("%d-%d\n",p2->name,p2->num);

(7)c語言中結構體賦值擴展閱讀:

C語言中變數間互相賦值很常見,例如:

inta,b;

a=b;

結構體也是變數(自定義變數),兩個結構體之間直接賦值按道理應該也是可以的吧,將一個結構體對象賦值給另一個結構體對象的。

例:

#include"stdio.h"

structtest

inta;

intb;

intc;

char*d;

};

intmain()

structtestt1={1,2,3,"tangquan"};

structtestt2={0,0,0,""};

printf("%d,%d,%d,%s\r\n",t2.a,t2.b,t2.c,t2.d);

t2=t1;

printf("%d,%d,%d,%s\r\n",t2.a,t2.b,t2.c,t2.d);

return0;

熱點內容
伺服器內網ip地址安全 發布:2025-01-17 07:33:18 瀏覽:185
華為新演算法 發布:2025-01-17 07:31:43 瀏覽:55
希沃如何存儲 發布:2025-01-17 07:31:00 瀏覽:551
演算法研讀 發布:2025-01-17 07:19:37 瀏覽:279
我的世界橙子生存之旅伺服器ip 發布:2025-01-17 07:19:27 瀏覽:617
用戶名密碼錯誤導致認證失敗是什麼意思 發布:2025-01-17 06:58:24 瀏覽:328
安卓空調遙控器在哪裡 發布:2025-01-17 06:43:54 瀏覽:195
安卓版什麼做視頻軟體好用 發布:2025-01-17 06:43:14 瀏覽:336
神超電腦配置哪個好 發布:2025-01-17 06:35:50 瀏覽:574
pythonlistsplit 發布:2025-01-17 06:31:26 瀏覽:34