c語言中的結構變數
① 請問c語言中結構名和結構變數是什麼
結構可以看成是特殊的數組。
結構名等同數組名。結構變數等同 數組名。-- 通俗易懂吧!
數組 含一組數,它們是同一類型的。整型數組,它的所有元素都是整型。float 數組,它的所有元素都是float型.
結構 含一組數,它們往往 是 不同類型的。 例如,它的成員 有整型,有float型,有 char 型。
有沒有結構變數,就同有沒有數組變數一樣。
你不想用一堆簡單變數,而改用數組,就用數組了。同樣,你不想用一堆各種類型的簡單變數,你就改用結構了。
例如,學生信息:姓名,學號,數學成績,語文成績,物理成績,平均分數,你想把1個學生的這些信息作為一組數,放在一個變數里。你就可以定義一個結構類型,例如喊它struct student. 成員變數名叫 name,num,math,yuwen,wuli,mean.
寫出:
struct student{char name[20];int num;float math,yuwen,wuli,mean;} -- 這就是結構。
struct student st1,st2,st3,st4; -- 聲明了4個學生的學生信息結構變數,變數名 st1,st2,st3,st4
接下來就可以使用它們了。
至於如何用,自己看書吧。這里只能扼要回答基本問題。
② c語言的結構類型的意思
磨吵結構體變數簡稱為結構變數,它由結構類型定義,有三種定義方法。下面以定義結構類型 book 和結構變數mybook 、 storybook 為例說明之。
1. 先定義結構類型,再定義結構變數。
struct book /* 定義結構體類型 */
{
char bookname[20];
float price;
char publisher[20];
char author[10];
} ;
struct book mybook, storybook;
用這種方法定義結構變數,是最常用的方法,但須注意不能省略關鍵字「 struct 」。還可以在定義結構變數的同時給它的成員賦初值。如:
struct book /* 定義結構體類型 */
{
char bookname[20];
float price;
char publisher[20];
char author[10];
} ;
struct book mybook = { 「maths」, 24.7, 「 電子社 」, 「zhao」 }, storybook;
則, mybook 變數的 price = 24.7 。
2. 定義結構類型的同時定義結構變數。
struct book /* 定義結構體瞎數侍類型 */
{
char bookname[20];
float price;
char publisher[20];
char author[10];
} struct book mybook, storybook;
3. 不定義結構類型,直接定義結構變數。
struct /* 不定義結構類型名 */
{
char bookname[20];
float price;
char publisher[20];
char author[10];
} struct book mybook, storybook;
需要說明的是,畢液當某結構類型的成員又是另外一個結構類型時,稱嵌套定義,其定義方法如下:
struct brith_date
{
int month ;
int day ;
int year ;
} ;
struct
{
char name[10] ;
char address[30];
char tel[12];
int age;
struct data birthday;
char sex[3];
} student_01 , employee ;
此例直接定義了 student_01 和 employee 兩個變數,但是沒有定義此結構體的名字,因此不能再定義與student_01 和 employee 同類的其它結構變數了!如下行定義是錯誤的:
truct boy, girl;
③ 在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);
}
(3)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;
}
④ 在C語言中.結構體變數之間可以相互賦值嗎
結構體變數直接賦值,就是其本身內存地址空間,按照地址分布直接賦值。
所以兩個一樣的結構變數可以直接賦值。
但是如果結構成員中有指針,且指針指向的地址大小不一樣,是不能直接賦值的。