c語言用戶自定義類型
① 簡述c語言中用戶自定義函數由哪幾部分組成
定義一個函數我們需要確定以下內容:
1、函數的返回值類型
2、函數的名稱
3、函數的參數
4、函數主體代碼塊
示例代碼:
int definePlus(int a, int b)
{
a = a + 1;
b = b + 1;
return a + b;
}
例如上面代碼中就定義了一個返回值為int類型的函數,其函數名為definePlus,一對小括弧中的內容為這個函數的參數,也就是說這個函數有兩個傳入參數int a和int b。
在函數體內,分別讓a在原來的基礎上加1,讓b在原來的基礎上加1,然後使用return關鍵字返回a + b的和。如果a的值是2,而b的值是3,那麼這個函數的返回值則是7。
(1)c語言用戶自定義類型擴展閱讀
函數的調用與聲明
如果函數的定義是在調用函數的後面則需要在調用之前聲明函數的定義,否則不需要事先聲明。聲明的意思是告訴編譯器,這個函數的返回值類型、函數名和參數。
在調用一個函數時,需要向這個函數傳其需要的參數,例如a和b這兩個變數,並可以指定另一個變數用於接收這個函數執行後的返回值,比如變數c就接收了函數wrongplus()的返回值,結果為7。
但是我們看到程序的運行結果是2 + 3 = 7,也就是說,執行了函數wrongplus()後,我們雖然對函數內的參數變數分別加1,但主函數main中的a和b的值並沒有發生變化。示例代碼:
#include <stdio.h>
main()
{
int a = 2, b = 3;
int c;
int wrongplus(int a, int b);
c = wrongplus(a, b);
printf("%d + %d = %d
",a, b, c);
}
int wrongplus(int a, int b){
a = a + 1;
b = b + 1;
return a + b;
}
2 + 3 = 7
② C語言用戶自定義類型
#define 用宏定義吧,直接將a和b的值定義為你想要的,但是你限定了范偉的話,最好使用帶參宏,你問題是用戶自定義類型,如果你想改變類型的名稱的話,可以用typedef!
③ C語言中struct是個什麼意思 怎麼用 能不能通俗點說
結構(struct)
結構是由基本數據類型構成的、並用一個標識符來命名的各種變數的組合。
結構中可以使用不同的數據類型。
結構說明和結構變數定義
在Turbo C中, 結構也是一種數據類型, 可以使用結構變數, 因此, 象其它 類型的變數一樣, 在使用結構變數時要先對其定義。定義結構變數的一般格式為:
struct 結構名
{
類型 變數名;
類型 變數名;
...
} 結構變數;
結構名是結構的標識符不是變數名。 類型為第二節中所講述的五種數據類型(整型、浮點型、字元型、指針型和 無值型)。
構成結構的每一個類型變數稱為結構成員, 它象數組的元素一樣, 但數組中 元素是以下標來訪問的, 而結構是按變數名字來訪問成員的。 下面舉一個例子來說明怎樣定義結構變數。
struct string
{
char name[8];
int age;
char sex[2];
char depart[20];
float wage1, wage2, wage3, wage4, wage5;
} person;
這個例子定義了一個結構名為string的結構變數person, 如果省略變數名 person, 則變成對結構的說明。用已說明的結構名也可定義結構變數。這樣定義 時上例變成:
struct string
{
char name[8];
int age;
char sex[2];
char depart[20];
float wage1, wage2, wage3, wage4, wage5;
}; struct string person;
如果需要定義多個具有相同形式的結構變數時用這種方法比較方便, 它先作 結構說明, 再用結構名來定義變數。
如果省略結構名, 則稱之為無名結構, 這種情況常常出現在函數內部, 用這 種結構時前面的例子變成:
struct
{
char name[8];
int age;
char sex[2];
char depart[20];
float wage1, wage2, wage3, wage4, wage5;
} Tianyr, Liuqi;
結構作為一種數據類型, 因此定義的結構變數或結構指針變數同樣有局 部變數和全程變數, 視定義的位置而定。
結構變數名不是指向該結構的地址, 這與數組名的含義不同, 因此若需要求結構中第一個成員的首地址應該是&[結構變數名]。
(3)c語言用戶自定義類型擴展閱讀:
結構體變數可進行哪些運算
結構體變數不能相加、不能相減,也不能相互乘除,但結構體變數可以相互賦值。也就是說,可以將一個結構體變數賦給另一個結構體變數。但前提是這兩個結構體變數的結構體類型必須相同。
結構體變數的引用方式決定了:
「結構體變數名」可以與「結構體成員名」同名。
「結構體變數名」可以與「結構體名」同名。
「兩個結構體類型定義的結構體變數中的成員可以同名」。
就比如定義了一個結構體類型用於存放學生的信息,裡面有成員「char name[20];」,那麼如果又定義了一個結構體類型用於存放老師的信息,那麼裡面也可以有成員「char name[20];」
因為結構體成員在引用時,必須要使用「結構體變數名.成員名」的方式來引用,通過引用就可以區分它們,所以不會產生沖突,因此可以同名!
只要不沖突,都可以重名!但是兩個結構體變數名就不可以重名了,因為無法區分它們,就會產生沖突。當然這里說的是在同一個作用域內,如果在一個函數中定義一個局部變數a,那麼在另一個函數中當然也可以定義一個局部變數a。它們互不影響。
④ c語言里怎麼看出是自定義的函數和自定義的數據類型
數據類型,是可以用來定義變數的,如:int,
float,double
char這些可以用來定義變數的叫數據類型,只不過這些是系定義的數據類型,你自已定義的,如你上面的struct
Student
也是類據類型,因為你可以用它用定義變數,如struct
Student
std;,而且這是你自己定義的,所以叫自定義數據類型。
自定義的函數,像
int
max(int
a,
int
b)
{
}
這種帶有參數或不帶參數但帶(),有
返回值
或返回值為void的,它是可以被調用的就叫函數。
而且它是你自己定義來實現某種功能的,所以叫自定義函數。
時間長了,你慢慢就對這些熟悉的了
⑤ 關於C語言結構體自定義類型
首先,定義一個結構的一般形式為:
struct結構名
{
//成員表列
};
成員表由若干個成員組成, 每個成員都是該結構的一個組成部分。對每個成員也必須作類型說明,其形式為:「類型說明符 成員名;」。成員名的命名應符合標識符的書寫規定。例如:
struct stu
{
int num;
char name[20];
char sex;
float score;
};
在這個結構定義中,結構名為stu,該結構由4個成員組成。 第一個成員為num,整型變數;第二個成員為name,字元型數組;第三個成員為sex,字元型變數;第四個成員為score,浮點型變數。 應注意在括弧後的分號是必不可少的。
然後,當結構定義完成後,即創建了一種數據類型,可以像int、float等內置類型一樣使用,以上面定義的stu結構體來和int類型對比著看。
inta;//定義一個int類型的變數a
stua;//定義一個stu類型的變數a
int*p;//定義一個int類型的指針p
stu*p;//定義一個stu類型的指針p
inta[10];//定義一個int類型的數組a,它有10個元素,每個元素是int類型
stua[10];//定義一個stu類型的數組a,它有10個元素,每個元素是stu類型。
⑥ c語言 中DIR類型
C語言中的數據類型簡單的分為兩類,一類是內置數據類型,比如int、float
;一類是用戶自定義類型,比如結構體、聯合體、位域等。
默認的數據類型中沒有DIR類型,因此應該是一種用戶自定義類型,可以在源代碼中查找相關的類型定義。
⑦ C語言自定義類型的問題,C#和C語言都精通的大神來幫我解答一下吧
typedef void ( *libvlc_callback_t )( const struct libvlc_event_t *, void * );
這個是定義了一個新的類型:函數指針。
假設有定義:
libvlc_callback_t pf;
則pf為一個函數指針,可以指向這樣的函數:返回值為void,函數參數是( const struct libvlc_event_t *, void *)。
c#不了解,不過好像沒有指針吧,