c語言 資料型別(4)

2021-07-14 17:58:33 字數 2957 閱讀 5988

答:是資料集合的劃分,不同資料型別對cpu的意義是不一樣的

流程:先找到變數名,向右看,向左看,向右看,向左看……直至全部結束

例如:

int **a;

先找到變數名a,然後向右看,是個分號,代表著結束,說明這就是個變數,然後向左看,是乙個指標,說明他是乙個指標。所以a是乙個指標變數,向右看沒有了,向左看又是乙個指標,這時候找的是原來那個指標變數代表著什麼,說明原來那個指標變數裡存放的是現在這個指標的位址,叫做指標的指標變數,然後繼續找現在這個指標代表著什麼,向右看又是什麼都沒有,向左看是乙個整型,說明這個指標是乙個整型指標,用來儲存整型數的位址。所以總的來看。這是乙個整型指標的指標變數。

a:是乙個函式指標變數,形式引數為整型,返回值為整型

int (*a[10])(int);

a:是乙個函式指標陣列

int * ( * ( *fp1)(int)) [10];

fp1:是乙個函式指標變數,形式引數為整型,返回值為陣列指標,陣列裡存放的是整型指標。

int * (* (*arr[5])()) ();

arr:是乙個函式指標陣列,陣列裡存放的指標,指標裡存放的是無參的返回值為函式指標的函式的位址,現在這個指標儲存的是乙個無參的,返回值為整型指標的函式位址。

float (* (*b())【】) ();

b:是乙個無參函式,返回值為陣列指標,指標儲存陣列的位址,陣列儲存的是無參函式指標,返回值為float

void * (* c)(char a,int (*b)());

c:是乙個函式指標變數,引數為字元型和函式指標,返回值為void *型

float (* (* e[10])(int *)) ;

e:函式指標陣列,引數為整型指標,返回值為陣列指標,陣列裡存放的是浮點數。

隱式型別轉化:char < int < float < double

例如:

int num = 5;

int*p = &num;

char *ptr = p;

printf("%d\n" , p);

printf("%d\n" , *p);

printf("%c\n" , ptr);

說明,從int到char,是不能夠隱式轉換的。

若將char *ptr = (char) p;

結果也是不對的,因為p的型別是int *, 是乙個指標型別,不可以變成字元型,同時ptr字元指標也不可以變成乙個字元型。

char *ptr = (char *)p;

printf("%c\n" , ptr);

printf("%d\n" , *ptr);

(記憶體儲存單位:1位元組=8位iwe(bit),半字=2個位元組=16位,字=4個位元組=32位,雙字=8個位元組=64位)

以位元組為單位:

char:1

short:2

int:4

long:4

float:4

double:8

long long(64位作業系統):8

char *:4

short *:4

int *:4

float *:4

double *:4

問:為何所有的指標長度都是4?

如何求某個變數或資料型別的位元組

利用sizeof這個運算子(注意不是函式)

命令:

sizeof + 變數名

或者 sizeof + (資料型別名)

char的記憶體儲存範圍是多少?

char是乙個位元組,8位

無符號時範圍是0-255(0000 0000 - 1111 1111)

有符號範圍是-128 - 127(1000 0000 - 0111 1111)

(負數都是以補碼的形式存放在計算機內的)

求負數的補碼

除符號位外,取反加1

已知負數補碼求原碼

依舊是取反加1

printf("%d\n" , ~2);
~是按位取反符,即每一位都要取反。

2的原碼是0000 0010 各位取反就是 1111 1101

然後就變成負數了,在機器裡負數都是按補碼存放的,即1000 0011

輸出結果為:-3

1、為了提高**的移植性,一般不直接用資料型別。

例如typedef unsigned char char;

這樣萬一應用到別的不可以使用unsigned char的平台上時,就可以直接修改typedef了。

2、有時候為了讓變數更加一目了然,會將資料型別改名

例如 typedef int age;

在**中,每個是年齡的變數都這樣定義:age a =30;

一些常識

1、有符號數和無符號數進行比較時,會將有符號數隱式轉換成無符號數。

2、指標儲存字串的首位址

3、strlen是函式,要加#include

char *p = "hello world";

sizeof p = 4

strlen(p) = 11

char p[100] = "hello world";

sizeof p = 100

strlen p = 11

char p = "hello world";

sizeof p = 12

strlen p = 11

C語言 資料型別

基本型別 整形 int 字元型 char 實型 浮點型 單精度 float 雙精度 double 構造型別 陣列型別,結構型別 struct 聯合型別 uion 列舉型別 enum 指標型別 空型別 無值型別 void。常量 在程式執行過程中,其值不能被改變的量稱為常量。變數 變數代表記憶體中具有特...

c語言資料型別

下面是我關於c語言中各種資料型別長度的總結 參考the c programming language 1.c語言中的整數型別有char,short,int,long等幾種,下面是c語言對每種資料型別長度的規定 a short和long型別的長度不相同 b int型別通常同具體機器的物理字長相同 c ...

C語言 資料型別

整形資料在記憶體中的存放形式 數值是以補碼表示的 1.正數的補碼和原始碼相同,2.負數的補碼 將該數的絕對值的二進位制形式按位取反再加1.例如 求 10 的補碼 10的原始碼 0000 0000 0000 1010 取反 1111 1111 1111 0101 再加1,得 10補碼 1111 111...