C語言數據類型及變量整理

數據類型

獲取int的字節數大小方法

printf("int bytes:%d",sizeof(int));

列表整理

類型

字節數

取值範圍

char

1

[-128,127]=[-2^7,2^7-1]

unsigned char

1

[0,255]=[0,2^8-1]

short int(short)

2

[-2^15, 2^15-1]

unsigned short int

2

[0,2^16-1]

int

4

[-2^31,2^31-1]

unsigned int

4

[0,2^32-1]

long int

4

[-2^31,2^31-1]

unsigned long int

4

[0,2^32-1]

long long int

8

[-2^63, 2^63-1]

unsigned long long int

8

[0, 2^64-1]

float

4

-/+3.4e38(精確到6位小數)

double

8

-/+1.7e308(精確到15位小數)

long double

12

-/+1.19e4932(精確到18位小數)

 Int 與 long int的區別

早期的C平臺是16位int系統,int用二字節表示,範圍是-32768~+32767;long是long int的簡寫,用4字節表示,範圍是-2147483648~+2147483647。顯然在早期平臺下long能表示的整數範圍要比int大得多。而時下的平臺流行的是32位int系統,即4字節系統,int與long在這樣的系統下已經沒有區別了,它們都是4字節帶符號整數,表數範圍都是-2147483648~+2147483647。

數據溢出

當變量大於類型的最大值或者小於類型的最小值時,該變量的值會進行跳轉,如最大值加一則是最小值。

#include<stdio.h>
void main(){
       char min=-128-1;
       char max=127+1;
       printf("min-1=%d \r\n",min);   //輸出: 127 
       printf("max+1=%d \r\n",max);  //輸出: -128 
}

靜態變量與函數

只用於本文件的變量或函數要全部使用static關鍵字聲明

靜態變量

0、靜態全局變量僅對當前文件可見,其他文件不可訪問,其他文件可以定義與其同名的變量,兩者互不影響,不可用extern實現誇文件訪問

1、靜態變量會自動賦有初值0,而普通變量編譯器不會自動賦初值

2、局部靜態變量放置在數據區,所以不會因函數的消失而死亡,但寄生於函數之上。全局靜態變量與全局變量類似。

3、靜態變量重複定義時,局部靜態變量優先級高,但只作用於局部

#include<stdio.h>
static int i;//全局靜態變量 
void fun1(){
    static int i;//局部靜態變量 
    printf("%d\r\n",i);//0-9(局部) 
    i++;
}
void main(){
    int x;
    for(x=0;x<10;x++) fun1();
    printf("---%d\r\n",i);//0(全局) 
}

靜態函數

0、在函數的返回類型前加上static,就是靜態函數

1、靜態函數只能在聲明它的文件中可見,其他文件不能引用該函數

2、不同的文件可以使用相同名字的靜態函數,互不影響

結構體

聲明

方法1:

struct 結構體名
{
   成員列表 
}; 
struct  結構體名 變量1,變量2;

方法2

struct 結構體名
{
   成員列表 

}變量1,變量2;

方法3

struct
{
   成員列表 
   
}變量1,變量2;

方法4

typedef struct
{
  成員列表; 

}結構體別名;
結構體別名 變量1,變量2;

初始化

方法1

struct
{
   成員列表 
   
}變量1={成員1值,成員2值,成員3值……};

方法2

memset(&結構體變量名,0,sizeof(結構體變量名)); //將所有全部變量清零

引用(使用)成員:

結構體變量

struct  結構體名 變量1,變量2;
變量1.成員名

結構體指針變量

struct  結構體名 *變量1;
變量1->成員名

C文件間共享變量

extern

extern是計算機語言中的一個關鍵字,可置於變量或者函數前,以表示變量或者函數的定義在別的文件中。提示編譯器遇到此變量或函數時,在其它模塊中尋找其定義,另外,extern也可用來進行鏈接指定。

可以經extern寫在頭文件中,變量的定義寫在任意一個點C文件(如main.c)中,此後只要包含該頭文件夾即可實現變量的共享使用

舉個栗子:

C1.h,聲明函數c1fun()

#ifndef _C1_H_
#define _C1_H_
void c1fun(char *strx);
#endif

C1.c,實現函數c1fun()

#include<stdio.h>
#include"c1.h"
char *wu;
void c1fun(char *strx){
   wu=strx;
}

Main.c,調用函數c1fun(),並讀取外部變量wu的值

#include <stdio.h>
#include "c1.h"
extern char *wu;
void main(){
   c1fun("123456");
   printf("===:%s",wu);//輸出:123456
}

#define

針對不改變的量,可以在頭文件中聲明,在其他c文件中包含即可使用

如c1.h中:

#define DONG "dongxiaodong"

Mian.c中:

#include"c1.h"
……
printf("===:%s",DONG);
……

宏定義的使用

#define的使用

宏定義常量

#define DONG '2'         //字符
#define DONG "is str"    //字符串 
#define DONG 12          //數字 
#define DONG 13.36       //浮點數

宏定義範圍

#define P 123 
……
#undef P

typedef的使用

宏定義之類型重命名

typedef unsigned char u8;

宏定義之類型重命名對比

#include<stdio.h>

#define ch1 char*
typedef char* ch2;

void main(){
 ch1 a,b;//char *a,b;
 ch2 c,d;//char *c,*d;
 //輸出: --8,1,8,8--
 printf("--%d,%d,%d,%d--",sizeof(a),sizeof(b),sizeof(c),sizeof(d));
}

帶參數的宏定義

#include<stdio.h>

#define Max(x,y) ((x>y)?x:y) 
#define Add(x,y) (x+y);

void main(){
  int i=Max(10,2);
  int ii=Add(2,1) //此處無分號 
  printf("max:%d,add:%d",i,ii);//max:10,add:3
}

參考:

https://blog.csdn.net/xlh006/article/details/81540703

https://blog.csdn.net/kuniqiw/article/details/84495732

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章