C语言(一)

数据存储

基本数据类型

  • 整数:
    整形 int
    短整型 short int
    长整型 long int
  • 浮点数:
    单精度浮点数 float
    双精度浮点数 double
  • 字符:
    单个字符 char
  • 复合数据类型
    结构体
    枚举

[变量

  • 变量的本质就是内存中的一段存储空间
  • 变量必须初始化(赋值),如果不赋值最终输出为填充字(垃圾值)。

进制

int i = 17;
printf("i = %d\n",i);
//%d表示以十进制输出
//%x表示以十六进制输出
//%o表示以八进制输出

字节

字节是存储数据的单位,并且是硬件所能访问的最小单位。(1字节=8bit, 1K=1024字节,1M =1024K,1G=1024M)

ASCII码

不是一个值,而是一种规定,规定不同的字符是使用哪个整数值去表示。eg : ‘A’–65,’B’–66

char ch = 'A';//OK
char ch = 'B';//error,ch被重复定义
ch = 'B';//OK,把B赋值给ch

常量

  • 整数:
    十进制:17
    八进制:017(数字0)
    十六进制:0x17 或 0X17
  • 浮点数:
    传统写法:3.2
    科学计数法:3.2e3(值为3200),1234.5e-2(值为12.345)
  • 字符:
    单个字符:‘a’
    字符串: “aa”

    注: “a”是正确的,因为”a”表示’a’和’\0’的组合

  • 存储方式
    字符:’A’先转为ASCII码,再转换为补码(本质上与整数存储方式相同)
    整数:以补码形式转换为二进制代码存储在计算机中
    实数:以IEEE754标准转换为二进制代码存储在计算机中

强制数据类型转换

格式:(数据类型)(表达式)
功能:把表达式的值强制转换为前面所执行的数据类型

(int) (4.5+2.2);//最终值为6
(float)(5);//最终值为5.000000

结构体

为什么需要结构体

为了表示一些复杂的事物,而普通的基本类型无法满足实际要求

什么叫结构体

把一些基本数据类型组合在一起形成的一个新的复合数据类型

如何定义结构体

//第一种方式(推荐使用)
struct Student{
   int age;
   float score;
   char sex;
};

//第二种方式
struct Student2{
   int age;
   float score;
   char sex;
} student2;//定义一个名为student2的结构体

//第三种方式
struct {
   int age;
   float score;
   char sex;
} student1;

int main(void){
   struct Student student = {80,66.6,'F'};//初始化一个名为student的结构体
}

怎样使用结构体变量

赋值和初始化

struct Student{
   int age;
   float score;
   char sex;
};
int main(void){
   struct Student student = {80,66.6,'F'};//初始化,定义的同时赋初值

   struct Student student2;//定义完后再赋值
   student2.age = 10;
   student2.score = 90;
   student2.sex = 'F';
   return 0;
}

怎样访问结构体变量中的每一个成员

  1. 结构体变量名.成员名

  2. 指针变量名->成员名

    struct Student{
    int age;
    float score;
    char sex;
    };
    int main(void){
    struct Student student = {80,66.6,'F'};//初始化,定义的同时赋初值
    
    student.age = 10;//第一种方式
    
    struct Student *pst = &student;//第二种方式
    pst->age = 10;//pst所指向的结构体的age成员
    return 0;
    }

    注:pst->age会在计算机内部转化成(* pst).age

结构变量的运算

结构体变量不能相加、相减,也不能相互乘除,只能赋值

struct Student student1,student2;
student1 = student2;

#### 结构变量和结构体变量指针作为函数参数传递问题

//error,不能直接对结构体进行修改
void InputStudent1(st){
   st.age = 10;
   strcpy(st.name,"张三");//不能写成stu.name=“张三”,涉及C语言字符串处理
}

//OK
void InputStudent2(struct Student * pstu){
   pstu->age = 10;
   strcpy(pstu->name,"张三");
   pstu->sex = 'F';
}

void OutputStudent(struct Student ss){
    printf("%d %s %c\n".ss.age,ss.name,ss.sex);
}

int main(void){
   struct Student student1;
   InputStudent(st);//error,对结构体变量输入
   InputStudent2(&st);//OK
   OutputStudent(st);//对结构体变量输出,也可以传指针
   return 0;
}

注:对结构体进行修改必须输入结构体的指针


   转载规则


《C语言(一)》 fightingtree 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录