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


數據類型

獲取int的字節數大小方法

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

列表整理

 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 
}

進制

int i=99;                 /* 十進制        */
int i=07;                 /* 八進制        */
int i=0x04;               /* 十六進制      */
unsigned int i=60u;       /* 無符號整數    */
long int i=60l;           /* 長整數       */
unsigned long int i=60ul; /* 無符號長整數  */

靜態變量與函數

只用於本文件(當前點C文件)的變量或函數要全部使用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、不同的文件可以使用相同名字的靜態函數,互不影響

枚舉

enum Ex{
    D0,D1,D2,D3 //0,1,2,3
}; 

enum Ex{
    D0=100,D1,D2,D3 //100,101,102,103
}ee; 

enum Ex{
    D0,D1=200,D2,D3 //0,200,201,202
}ee; 

printf("%d\r\n",D2);

結構體

聲明

方法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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM