c語言強制轉換結構體類型
㈠ 關於c語言中的強制類型轉換,請真正懂的高手解答下
不是。
指針類型決定對對象的操作方式。也就是你如何看待、如何處理緩沖。
打個淺顯的比方,同樣是櫥窗里的一塊肉,你既可以把它看作很多的肉片,也可以把它看作少量的肉塊。因為它在櫥窗里,因此你實際上切不到它!
㈡ C語言結構體類型
在C語言中,結構體(struct)指的是一種數據結構,是C語言中聚合數據類型(aggregate data type)的一類。結構體可以被聲明為變數、指針或數組等,用以實現較復雜的數據結構。結構體同時也是一些元素的集合,這些元素稱為結構體的成員(member),且這些成員可以為不同的類型,成員一般用名字訪問。
在C語言中,定義一個結構的一般形式為:
struct結構名
{
//成員表列
};
成員表由若干個成員組成,每個成員都是該結構的一個組成部分。對每個成員也必須作類型說明,其形式為:「類型說明符成員名;」。成員名的命名應符合標識符的書寫規定。例如:
structstu
{
intnum;
charname[20];
charsex;
floatscore;
};
在這個結構定義中,結構名為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語言結構體類型問題
這個跟以往的調用交換
函數
後
數值
沒變是一個道理
雖然函數Mp1中oneday的year改變了
但是實際上
主函數
中oneday這個
結構體
的存儲地址里的內容一直沒變
㈣ C語言 結構體類型..
static不是類型,是類型修飾符。具體是什麼含義,要看這段代碼出現的位置。
㈤ c語言中,在結構體中如何將void *轉存為具體需要的數據類型
1 許多初學者對C/C++語言中的void及void指針類型不甚理解,因此在使用上出現了一些錯誤。本文將對void關鍵字的深刻含義進行解說,並
詳述void及void指針類型的使用方法與技巧。
2.void的含義
void的字面意思是「無類型」,void *則為「無類型指針」,void *可以指向任何類型的數據。
void幾乎只有「注釋」和限製程序的作用,因為從來沒有人會定義一個void變數,讓我們試著來定義:
void a;
這行語句編譯時會出錯,提示「illegal use of type 'void'」。不過,即使void a的編譯不會出錯,它也沒有任何實際意義。
void真正發揮的作用在於:
(1) 對函數返回的限定;
(2) 對函數參數的限定。
我們將在第三節對以上二點進行具體說明。
眾所周知,如果指針p1和p2的類型相同,那麼我們可以直接在p1和p2間互相賦值;如果p1和p2指向不同的數據類型,則必須使用強制類型
轉換運算符把賦值運算符右邊的指針類型轉換為左邊指針的類型。
例如:
float *p1;
int *p2;
p1 = p2;
其中p1 = p2語句會編譯出錯,提示「'=' : cannot convert from 'int *' to 'float *'」,必須改為:
p1 = (float *)p2;
而void *則不同,任何類型的指針都可以直接賦值給它,無需進行強制類型轉換:
void *p1;
int *p2;
p1 = p2;
但這並不意味著,void *也可以無需強制類型轉換地賦給其它類型的指針。因為「無類型」可以包容「有類型」,而「有類型」則不能包
容「無類型」。道理很簡單,我們可以說「男人和女人都是人」,但不能說「人是男人」或者「人是女人」。下面的語句編譯出錯:
void *p1;
int *p2;
p2 = p1;
提示「'=' : cannot convert from 'void *' to 'int *'」。
3.void的使用
下面給出void關鍵字的使用規則:
規則一 如果函數沒有返回值,那麼應聲明為void類型
在C語言中,凡不加返回值類型限定的函數,就會被編譯器作為返回整型值處理。但是許多程序員卻誤以為其為void類型。例如:
add ( int a, int b )
{
return a + b;
}
int main(int argc, char* argv[])
{
printf ( "2 + 3 = %d", add ( 2, 3) );
}
程序運行的結果為輸出:
2 + 3 = 5
這說明不加返回值說明的函數的確為int函數。
補充:void 中文翻譯為"無類型"。常用在程序編寫中對定義函數的參數類型、返回值、函數中指針類型進行聲明。
void的字面意思是"無類型",void *則為"無類型指針",void *可以指向任何類型的數據。
在C語言中,凡不加返回值類型限定的函數,就會被編譯器作為返回整型值處理。但是許多程序員卻誤以為其為void類型。
㈥ 在C語言中,基本類型都可以相互強制轉換嗎基本類型和結構體能強制轉換嗎強制轉化的條件是什麼
強制類型轉換顧名思義就是用戶強制的而不是語言自身的自動的進行轉換
因此,你可以對任何類型進行強制類型轉換,但後果需要你自己承擔
也就是說,你必須明確的知道這樣轉換以後會帶來什麼後果
比如你把float類型強制轉化為int類型,必然導致精度的丟失
如果你可以接受,沒問題
如果你把結構體類型強制轉換為int(或者反過來),程序只會給你一個警告
但你使用的時候,程序很可能會出錯
所以一般基本類型直接的轉換只會導致精度的丟失
但結構體和基本類型的轉換可能導致程序的錯誤
所以實際使用中應該盡量避免這樣的轉換
具體的你可以參照一下網路
㈦ C語言結構體類型函數
void f(A c) /* 注意:c結構變數名 但這個c也是個復製品,與原實參只是一樣的內容,卻不是同一個!! */ 所以結果還是a={1,2}; 答案為B
㈧ c語言中不是說 結構體也能強制轉換類型的嗎,為什麼寫的這段代碼會報錯呢
為什麼要把結構體強制類型轉換啊?結構體可以直接賦值的。
#include "stdafx.h"
struct A
{
char a;
int b;
};
struct B
{
int a;
char b;
};
int main(int argc, char* argv[])
{
A x = {'A' ,10};
B y = {11, 'B'};
B z;
z.a = x.a;
printf("%d\n",z.a);
return 0;
}
輸出A的值65
㈨ c語言的結構體類型
#include<stdio.h>
intmain()
{
intn,i;
structstudent
{
ints;
charn[20];
floatc;
}s1,s2;
scanf("%d%s%f",&s1.s,s1.n,&s1.c);
scanf("%d%s%f",&s2.s,s2.n,&s2.c);
if(s1.c>s2.c)
printf("%d,%s,%f ",s1.s,s1.n,s1.c);
else
printf("%d,%s,%f ",s2.s,s2.n,s2.c);
return0;
}
㈩ C語言中結構體變數能不能強制類型轉換
你寫的程序不太完整,不能看是否正確。例如:「PRO cell;」,「sell[i].mc」的由來。
從你的最後一句話可以大概猜出一些原因:因為用「strcmp」就行,而「strcmp」是專門處理字元串的,所以「sell[i].mc」的實際內容是字元串。可是你用「long」做強制類型字元串,這當然不行。
以上只是推斷,不一定對。