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+;
       printf(min-1=%d \r\n//输出: 127 
       printf(max+1=%d \r\n输出: -128 
}

进制

int i=99;                 /* 十进制        */
07;                  八进制        0x04;                十六进制      */
unsigned 60u;        无符号整数    long 60l;            长整数       60ul;  无符号长整数  */

静态变量与函数

只用于本文件(当前点C文件)的变量或函数要全部使用static关键字声明

静态变量

0、静态全局变量仅对当前文件可见,其他文件不可访问,其他文件可以定义与其同名的变量,两者互不影响,不可用extern实现夸文件访问

1、静态变量会自动赋有初值0,而普通变量编译器不会自动赋初值

2、局部静态变量放置在数据区,所以不会因函数的消失而死亡,但寄生于函数之上。全局静态变量与全局变量类似。

3、静态变量重复定义时,局部静态变量优先级高,但只作用于局部

#include<stdio.h>
static int i;全局静态变量 
 fun1(){
    局部静态变量 
    printf(%d\r\n0-9(局部) 
    i++;
}
 main(){
    int x;
    for(x=0;x<10;x++) fun1();
    printf(---%d\r\n0(全局) 
}

静态函数

0、在函数的返回类型前加上static,就是静态函数

1、静态函数只能在声明它的文件中可见,其他文件不能引用该函数

2、不同的文件可以使用相同名字的静态函数,互不影响

枚举

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

 Ex{
    D0=100,D3 100,101,102,103
}ee; 

200,200,201,202
}ee; 

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

结构体

声明

方法1:

struct 结构体名
{
   成员列表 
}; 
struct  结构体名 变量1,变量2;

方法2

 结构体名
{
   成员列表 

}变量1,变量2;

方法3


{
   成员列表 
   
}变量1,变量2;

方法4

typedef 
{
  成员列表; 

}结构体别名;
结构体别名 变量1,变量2;

初始化

方法1


{
   成员列表 
   
}变量1={成员1值,成员2值,成员3值……};

方法2

memset(&结构体变量名,0,1)">sizeof(结构体变量名)); 将所有全部变量清零

引用(使用)成员:

结构体变量

  结构体名 变量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;

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

带参数的宏定义

#include<stdio.h>

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

 main(){
  int i=Max(10,1)">2);
  int ii=Add(2,1)">1) 此处无分号 
  printf(max:%d,add:%dmax:10,add:3
}

参考:

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

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

相关文章

/** C+⬑ * 默认成员函数 原来C++类中,有6个默认成员函数: 构造函数 析构函数 拷贝...
#pragma once // 1. 设计一个不能被拷贝的类/* 解析:拷贝只会放生在两个场景中:拷贝构造函数以及赋值运...
C类型转换 C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译...
//异常的概念/*抛出异常后必须要捕获,否则终止程序(到最外层后会交给main管理,main的行为就是终止) try...
#pragma once /*Smart pointer 智能指针;灵巧指针 智能指针三大件//1.RAII//2.像指针一样使用//3.拷贝问...
目录&lt;future&gt;future模板类成员函数:promise类promise的使用例程:packaged_task模板类例程...