本文目錄一覽:
- 1、C語言函數指針的強制轉換有什麼作用?
- 2、C++,如何進行強制類型轉換
- 3、c語言指針強制類型轉換
- 4、C語言,指針變數強制類型轉換
- 5、C語言強制類型轉換
- 6、C語言中,函數指針的強制類型轉換有什麼作用?
C語言函數指針的強制轉換有什麼作用?
所以強制類型轉換就是按照某個變數的類型取出該變數的值,再按照***to***的規則進行強制轉轉換。如果是(類型名)常數,則是將該常數按照 常數to類型 的規則進行強制轉換。
指針也是一個變數,它自己佔據一個4個位元組的地址空間(由於程序的定址空間是2^32次方,即4GB,所以用4個位元組表示指針就已經能指向任何程序能夠定址到的空間了,所以指針的大小為4位元組),他的值是另一個東西的地址,這個東西可以是普通變數,結構體,還可以是個函數等等。由於,指針的大小是4位元組,所以,我們可以將指針強制轉換成int型或者其他類型。同樣,我們也可以將任何一個常數轉換成int型再賦值給指針。所有的指針所佔的空間大小都是4位元組,他們只是聲明的類型不同,他們的值都是地址指向某個東西,他們對於機器來說沒有本質差別,他們之間可以進行強制類型轉換。
指針 to 指針的強制類型轉換是指將指針所指的內容的類型由原先的類型轉換為後面的類型。
例如:
int a = 1;
int *p = a;
float *p1 = (float*)p;
則p和p1的值都是a,但是*p是將a地址中的值按照int型變數進行解釋,而*p1則是將a地址中的值按照float型變數進行解釋。
C++,如何進行強制類型轉換
通常情況下有4種方式進行強制類型轉換,他們是static_cast、const_cast、dynamic_cast、reinterpret_cast。
1、static_cast
用於將一種數據類型轉換成另一種數據類型,使用格式如下:
變數1 = static_cast變數1數據類型(另外一種數據類型變數或表達式),例如:
int a = 1;
float b;
b = static_castfloat(a);
2、const_cast
用於取出const屬性,把const類型的指針變為非const類型的指針,如:
#include iostream
using namespace std;
int main()
{
int a = 10;
const int *p = a; // 被const修飾,不能使用該指針修改其指向內容的值
int *q;
q = const_castint *(p); // 去除p的常量性給q,如果不去除直接賦值會報錯
*q = 20;
cout”a的地址為:”a” a的值為:”aendl;
cout”*q指向的地址為:”q” *q的值為:”*qendl;
}
3、reinterpret_cast
interpret是解釋的意思,reinterpret即為重新解釋,此標識符的意思即為數據的二進位形式重新解釋,但是不改變其值,只是這個轉換方式很少使用。
擴展資料:
當操作數的類型不同,而且不屬於基本數據類型時,經常需要將操作數轉化為所需要的類型,這個過程即為強制類型轉換。強制類型轉換具有兩種形式:顯式強制轉換和隱式強制類型轉換。強制類型轉換在C、C++、Java、Python中都會用到。
C++語言的特點:支持數據封裝和數據隱藏、支持繼承和重用、支持多態性,相比C語言,不同之處在於:
1、C語言是面向過程的,而C++是面向對象的。
2、C語言有標準的函數庫,它們鬆散的,只是把功能相同的函數放在一個頭文件中;而C++對於大多數的函數都是有集成的很緊密。
3、特別是C++中的圖形處理,它和語言的圖形有很大的區別。C語言中的圖形處理函數基本上是不能用在中C++中的。
4、C和C++中都有結構的概念,但是在C語言中結構只有成員變數,而沒成員方法,而在C++中結構中,它可以有自己的成員變數和成員函數。但是在C語言中結構的成員是公共的,什麼想訪問它的都可以訪問;而在C++中它沒有加限定符的為私有的。
5、C語言可以寫很多方面的程序,但是C++可以寫得更多更好,C++可以寫基於DOSr程序,寫DLL,寫控制項,寫系統。
6、C語言對程序的文件的組織是鬆散的,幾乎是全要程序處理;而c++對文件的組織是以工程,各文件分類明確。
參考資料:
強制類型轉換——百度百科
c語言指針強制類型轉換
一個指針做算數加減的時候,字面上的加一或者減一,實際增加或者減少的值是其指向類型的空間大小
也就是說,p+1,實際增長的值是sizeof(*p)
所以,將p轉為int*後,加10,實際增加是10*sizeof(int)也就是40
而如果是p+2,由於p是char*,實際增加的是2*sizeof(char)=2
C語言,指針變數強制類型轉換
在32位系統 里 CHAR佔一個位元組,INT*佔4個位元組,
你把原來一個位元組的硬分配成4個位元組的,那就把無用數據塞進 d裡面去了
比如內存里(太久沒弄,這些知識忘了很多,如有錯誤請見諒)
00 01 23 0a 00 10 23 00
| b |————————-本來B只佔了這點內存
| d |————————-然後你硬把它分配給了4位元組的D
裡面多了3位元組的無用數據,那就得到了一個讓你莫名奇妙的數。
C語言強制類型轉換
你理解的很正確。兩個問題的答案都是:對。
開始val被定義成int,就是說val的地址(就是val)是整形數。但是一旦取出地址val,你可以對這個地址的內容重新定義 (char *)就是告訴編譯器這個地址的指針內容當char的指針來讀。
這個可以看成是強制類型轉換,但不是標準的,標準的強制類型轉換是: (char) val 或者 char(val).
在32位的Windows操作系統中,int的數佔用4個位元組(byte),強制轉換成char後自動取最低一個位元組(就是8位),這個是自動完成的,你就不用擔心了。不過因為pointer被定義成指向char的指針,它加以的時候(pointer++)僅僅加一個位元組(8位)。
C語言中,函數指針的強制類型轉換有什麼作用?
函數指針強轉盡量不要有,僅用於類型實際是相同的,但定義的變數類型不同,如
另一個程序員寫了段代碼,要求你提供一個函數指針,類型如下:
typedef int (*ftype)(int,int);
但你寫的函數是 unsigned int fun(unsigned int,unsigned int),參數一個有符號,一個無符號,在你知道符號不影響結果的情況下,可以強制轉換。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/301265.html