1. c語言結構體
#include<stdio.h>
#include<string.h>
structperson{
charname[20]; //姓名
charsex; //M:Male男性,F:Female女性
unsignedintage; //年齡
};
intmain()
{
//structpersonper1("LiMing","M",20),per2("ZhangLi","F",21);
//可以採取上面的方式聲明的同時賦值
structpersonper1,per2;//聲明
//以下為向per1賦值
strcpy(per1.name,"LiMing");
per1.sex='M';
per1.age=20;
//以下為向per2賦值
strcpy(per2.name,"ZhouLi");
per2.sex='F';
per2.age=21;
//比較大小
if(per1.age<per2.age)
printf("%s年齡比較小! ",per1.name);
elseif(per1.age==per2.age)
printf("兩個人年齡一樣大! ");
else
printf("%s年齡比較小! ",per2.name);
//輸出兩個內容
printf("per1:姓名%s性別%c年齡%d ",per1.name,per1.sex,per1.age);
printf("per2:姓名%s性別%c年齡%d ",per2.name,per2.sex,per2.age);
return0;
}
2. C語言結構體內的指針問題
這個問題很直觀。當struct student_a st1=st;時只將結構體變數st中的指針name拷貝到了st1中的指針變數name,就是說只使st1.name和st.name同時指針了由st.name=malloc(100);動態分配的片區,並沒有重新再為st1.name分配100個位元組。你可以這樣考慮:1.如果由malloc分配的堆片區可以再復制,那怎麼釋放?2.你可以用sizeof(st1)測試一下看看有沒有那100個位元組(其實st中也沒有那100個位元組)。malloc分配的片區在堆里放著,只是讓某個指針指向了它。那麼,你在printf前free了它,它就可能被系統重新分配,所以輸出就亂了……
3. c語言結構體是什麼
在C語言中,結構體(struct)指的是一種數據結構,是C語言中聚合數據類型(aggregate data type)的一類。
結構體可以被聲明為變數、指針或數組等,用以實現較復雜的數據結構。結構體同時也是一些元素的集合,這些元素稱為結構體的成員(member),且這些成員可以為不同的類型,成員一般用名字訪問。
結構體作用:
結構體和其他類型基礎數據類型一樣,例如int類型、char類型,只不過結構體可以做成你想要的數據類型。以方便日後的使用。
在實際項目中,結構體是大量存在的。研發人員常使用結構體來封裝一些屬性來組成新的類型。由於C語言內部程序比較簡單,研發人員通常使用結構體創造新的「屬性」,其目的是簡化運算。
結構體在函數中的作用不是簡便,其最主要的作用就是封裝。封裝的好處就是可以再次利用。讓使用者不必關心這個是什麼,只要根據定義使用就可以了。
4. C語言結構體Struct怎麼使用
在Turbo C中,結構也是一種數據類型, 可以使用結構變數,因此,像其它類型的變數一樣,在使用結構變數時要先對其定義。
如果需要定義多個具有相同形式的結構變數時用這種方法比較方便,它先作結構說明,再用結構名來定義變數。
(4)c語言結構體視頻擴展閱讀
指向結構體的指針是一個一直都沒有掌握好的點,希望這里能記錄好一點,加強理解。
對於指針有幾個好處,
第一:就像指向數組的指針比數組本身更容易操作一樣,指向結構的指針通常也更容易操作;
第二:在早期的C中參數傳遞只能使用結構的指針;
第三:很多奇妙的數據表示都是用了包含指向其他結構的指針的結構。
和數組不同,結構的名字不是該結構的地址(即單獨的結構名並不是該結構地址的同義詞),必須使用 & 運算符。
參考資料c語言結構體struct相關使用說明
5. C語言 結構體
先動筆,把需求分析清楚。
再動筆,把流程設計清楚。
再動手,把代碼編寫完畢。
再動手,把代碼調試完成。
完了。
--------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ARRAYCOUNT 4
struct friends_list{
char name[10];
char birth[8+1];
char tel[13];
};
struct friends_list f[ARRAYCOUNT]={
"a","19900101","0101",
"b","20100202","0202",
"c","20000303","0303",
"d","19800404","0404"
};
int main(void)
{
int i,j;
struct friends_list f_tmp;
for(i=0;i<ARRAYCOUNT-1;i++){
for(j=i+1;j<ARRAYCOUNT;j++) {
memset( &f_tmp, 0x00, sizeof( struct friends_list ) );
if(strcmp(f[i].birth,f[j].birth)>0) {
memcpy( &f_tmp, &f[i], sizeof( struct friends_list ) );
memcpy( &f[i], &f[j], sizeof( struct friends_list ) );
memcpy( &f[j], &f_tmp, sizeof( struct friends_list ) );
}
}
}
for(i=0;i<ARRAYCOUNT;i++)
printf("%s %s %s\n", f[i].name, &f[i].birth, f[i].tel);
getch();
return 0;
}
可以根據實際情況自己修改下。
6. C語言結構體數據域怎麼初始化
createnode函數的形參是STU型,而newnode->data是Student型(指針newnode是STU型,但用->指向的成員data是Student型),所以newnode->data=data;的=兩邊類型不匹配,過不了編譯!
7. c語言中如何定義一個結構體
結構體的定義如下所示,struct為結構體關鍵字,tag為結構體的標志,member-list為結構體成員列表,其必須列出其所有成員;variable-list為此結構體聲明的變數。在一般情況下,tag、member-list、variable-list這3部分至少要出現2個。
結構體的成員可以包含其他結構體,也可以包含指向自己結構體類型的指針,而通常這種指針的應用是為了實現一些更高級的數據結構如鏈表和樹等。如果兩個結構體互相包含,則需要對其中一個結構體進行不完整聲明。
(7)c語言結構體視頻擴展閱讀:
一、結構體作用:
結構體和其他類型基礎數據類型一樣,例如int類型,char類型,只不過結構體可以做成你想要的數據類型,以方便日後的使用。
在實際項目中,結構體是大量存在的,研發人員常使用結構體來封裝一些屬性來組成新的類型。由於C語言內部程序比較簡單,研發人員通常使用結構體創造新的「屬性」,其目的是簡化運算。
結構體在函數中的作用不是簡便,其最主要的作用就是封裝。封裝的好處就是可以再次利用。讓使用者不必關心這個是什麼,只要根據定義使用就可以了。
二、結構體的大小與內存對齊:
結構體的大小不是結構體元素單純相加就行的,因為我們主流的計算機使用的都是32bit字長的CPU,對這類型的CPU取4個位元組的數要比取一個位元組要高效,也更方便。
所以在結構體中每個成員的首地址都是4的整數倍的話,取數據元素時就會相對更高效,這就是內存對齊的由來。每個特定平台上的編譯器都有自己的默認「對齊系數」(也叫對齊模數)。
程序員可以通過預編譯命令#pragma pack(n),n=1,2,4,8,16來改變這一系數,其中的n就是你要指定的「對齊系數」。
三、結構體的規則:
1、數據成員對齊規則:結構(struct)(或聯合(union))的數據成員,第一個數據成員放在offset為0的地方,以後每個數據成員的對齊按照#pragma pack指定的數值和這個數據成員自身長度中,比較小的那個進行。
2、結構(或聯合)的整體對齊規則:在數據成員完成各自對齊之後,結構(或聯合)本身也要進行對齊,對齊將按照#pragma pack指定的數值和結構(或聯合)最大數據成員長度中,比較小的那個進行。
3、結合1、2可推斷:當#pragma pack的n值等於或超過所有數據成員長度的時候,這個n值的大小將不產生任何效果。
8. C語言結構體定義
C語言結構體定義:struct為結構體關鍵字,tag為結構體的標志,member-list為結構體成員列表,其必須列出其所有成員;variable-list為此結構體聲明的變數。
結構體是C語言中聚合數據類型(aggregatedatatype)的一類。結構體可以被聲明為變數、指針或數組等,用以實現較復雜的數據結構。結構體同時也是一些元素的集合,這些元素稱為結構體的成員(member),且這些成員可以為不同的類型,成員一般用名字訪問。
(8)c語言結構體視頻擴展閱讀
1、struct是聲明結構體類型時必須使用的關鍵字,不能省略。「結構體」這個詞是根據英文單詞structure譯出的。
2、structSTUDENT是定義的數據類型的名字,它向編譯系統聲明這是一個「結構體類型」,包括name、num、sex、age、score、addr等不同類型的項。
3、structSTUDENT與系統提供的int、char、float、double等標准類型名一樣,都是數據類型,具有同樣的作用,都是用來定義變數的。
9. c語言結構體 問題 對著視頻寫的 為啥有錯誤呢
strcpy(pst->name,"sdfg");//中第一個參數為指向一個字元數組的指針
struct Student
{
int sid;
char name;//擔是這里聲明成了一個字元,一個字元當然裝不了「sdfg」這么長一個名字
//所以這句應該寫為char name[N];其中N為一個切確的數值,如5,6,7都行,長到能裝下一個名字
int age;
};// 要有分號