答:是資料集合的劃分,不同資料型別對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...