c語言結構變數
1. 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;
2. C語言結構體變數值的意義是什麼
結構體類型與其他數據類型相同,其變數要通過數據類型定義,但結構體類型是一種自定義數據類型,其變數定義方式與其他數據類型有些許區別。結構體變數的定義方式主要有兩種,下面分別進行介紹。
1、先定義結構體類型,再定義結構體變數
先定義結構體類型,再定義結構體變數,這種結構體變數定義方式與其他數據類型相同,其語法格式如下:struct 結構體類型名 結構體變數名;
以上一節定義的struct Student結構體類型為例,定義該結構體變數的示例代碼如下:struct Student stu1,stu2;
上述代碼定義了2個結構體類型變數stu1和stu2,這時,stu1和stu2便具有了結構體特徵,編譯器會為它們分配一段內存空間用於存儲具體數據,具體如下圖所示。
.png
struct Student結構體變數stu1、stu2的存儲結構
需要注意的是,使用結構體類型定義變數時,struct關鍵字不可少,struct Student作為整體才表示一個結構體類型。缺少struct關鍵字,程序編譯不通過。錯誤示例代碼如下:Student stu1; //錯誤,缺少struct關鍵字
編譯器在編譯上述代碼時會報錯,提示未定義標識符「Student」。
2、 在定義結構體類型的同時定義結構體變數
定義結構體類型的同時定義結構體變數,其語法格式如下:struct 結構體類型名稱
{undefined
數據類型 成員名1;
數據類型 成員名2;
…
數據類型 成員名*n*;
}結構體變數名列表;
以定義struct Student結構體類型,並定義struct Student類型的變數stu1、stu2為例,具體示例如下:struct Student{undefined
int num; char name[10];
char sex;
}stu1,stu2;
上述代碼在定義結構體類型struct Student的同時定義了結構體變數stu1和stu2,該方式的作用與先定義結構體類型,再定義結構體變數作用相同,其中,stu1和stu2中所包含的成員類型都是一樣的。
3. C語言中定義結構體類型變數的方法
1.結構體類型數據的定義方法和引用方法
定義結構體:struct
結構體名
{
成員列表
};
定義結構體類型的變數:有三種形式
①
定義類型時定義變數:struct
結構體類型名
{
成員列表
}變數名列表;
②
直接定義結構類型變數:struct
{
成員列表
}變數名列表;
③
由已定義的結構體類型來定義變數:struct
結構體類型名變數名列表;
引用結構體類型變數:在定義了結構體類型變數後,採用下列方法引用結構體類型的
變數:
結構體變數名.成員名
這里"."是成員(分量)運算符,它在所有的運算符中優先順序最高。
使用結構體時注意:
(1)結構體類型和結構體類型變數是不同的概念,定義結構體類型變數時應先定義
結構體類型,然後再定義變數屬於該類型。
(2)定義了—個結構體類型後,系統並沒有為所定義的各成員項分配相應的存儲空
間。只有定義了一個結構體類型變數,系統才為所定義的變數分配相應的存儲空間。結構
體類型變數佔用內存的位元組數是所有成員佔用內存長度之和。
(3)結構體成員的引用。如果一個結構體中又嵌套一個結構體,則要訪問一個成員
時,應採取外層向內層逐級訪問的方法。
求採納為滿意回答。
4. C語言結構體變數問題
您好,很高興回答您的問題。
在c語言中,有一種特殊的類型,就是結構體類型,這是構造類型的一種,也就是由若干個基本類型組合構成的特殊類型。
結構體類型與其他的基本類型一樣,要先定義再使用。那麼定義分成兩部分,一個是定義結構,也就是包含哪些內容;另一個就是定義類型,表示用來具有這個類型的變數。
您的程序中,STU就是定義結構,t就是具有這種類型的數組,n就是具有這種類型的變數。兩者是不同的概念,需要區別開來。
5. 在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);
}
(5)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;
}
6. C語言中如何定義全局結構體變數
結構的定義
用戶定義自己所需要的結構型,可以採用下列定義語句:
struct結構型名
{數據類型符1成員名1;
數據類型符2成員名2;
數據類型符3成員名3;
...
數據類型符n成員名n;
};
定義結構型變數的方法有三種,在定義的同時,可以給變數的每個成員賦初值。
先定義結構型,後定義變數
例如:
structstudent
{longnumber;
charname[10];
charsex;
floatscore[3];
};
...
structstudentx,y;/*定義student結構型的變數x和y*/
在定義結構型變數的同時,可以對結構型變數的所有成員賦初值。
例如:
structstudentx={100001L,"zhao1",'f',{89,94,86}},
y={100002L,"zhao2",'m',{78,86,92}};
2.定義結構型的同時定義變數
這種方法是將結構型的定義和變數定義同時進行。然後仍然可以使用這種結構型來定義其他的變數。
例如:
structstudent
{longnumber;
charname[10];
charsex;
floatscore[3];
}x={1000001L,"zhao1",'f',{89,94,86}};/*定義結構型同時定義變數並賦值*/
...
structstudenty={100002L,"zhao2",'m',{78,86,92}}
/*這個語句是正確的是因為前面定義了數據類型符structstudent*/
3.定義無名稱的結構型的同時定義變數
這種方法是將結構型定義和變數的定義同時進行,但省略了結構型的名稱,以後將無法使用這種結構型來定義其他變數。例子與2的例子差不多,只是因為沒有定義結構型的名稱,所以後面對y的賦值就不可用。
從變數的生存期來分,我們把生存期覆蓋了定義點到整個程序結束的變數成為具有全局壽命的變數,簡稱「全局變數」。
習慣上結構定義都是在main函數之前的,從這一點上看,結構都是全局變數,不知道這樣回答是不是讓你滿意。