其他分享
首页 > 其他分享> > # C语言学习

# C语言学习

作者:互联网

目录

数据类型

变量

声明: 向编译器保证变量会以指定的名称和类型存在, 令编译器能够在不知道具体细节时也能够进一步编译.

定义: 为声明的变量建立存储空间(预留内存, 方便存放待输入的变量).

除非使用extern关键字, 否则在声明时都将直接完成变量的定义.

声明变量时, 通过如下结构:

// 声明&定义
type var_name;
type var_name1, ..., var_nameN;

// 赋值
type var_name = var_value;

// 使用extern关键字, 只声明, 不定义.
extern type var_name

其中, type主要功能为声明变量类型, 就是为变量分配内存空间, 通过指定具体的类型, 编译器可以得知需预留的内存大小.

变量的变化范围超出指定的内存空间后, 会出现内存溢出, 可能返回预期之外的结果.

声明指针变量时, 稍有不同:

// 声明&定义
type *pointer_name;

// 指向指针的指针, 可继续外推
type **pointer_name;

// 赋值
type *pointer_name = mem_addr;

其中, 星号*即表示该变量为一个指针变量(告诉编译器这只是个地址), type表示该变量指向对象的类型(告诉编译器在到达地址后, 往后多大范围内是要找的对象).

存储类

存储类定义了程序中变量的可见性和生命周期, C语言中可用的存储类有:

函数

定义方法:

reture_type func_name(params_list) {
    function_body;
}

函数指针的定义方法:

return_type (*func_pointer)(param1_type, ..., paramN_type);

// 赋值
return_type (*pointer_name)(param1_type, ..., paramN_type) = & some_func;

枚举

批量完成名称到整数的映射, 若不显示赋值, 则首位元素默认为0, 非首位元素为前一元素+1.

若元素对应的整数不连续, 则该枚举无法遍历.

定义方法:

enum tag {
    element_name1 = some_int;
    ...
   	element_name2 = some_int;
} var_name;

结构体

一种用于存储多个不同类型数据的结构, 占用内存大小为所有成员之和.

定义方法:

struct tag {
    type member1;
    ...
    type memberN;
} var_name;

// 声明&定义
struct tag var_name;

// 赋值
struct tag var_name = {member1, ..., memberN};

// 对成员赋值
var_name.memberX = member_value;

共用体

指定一块可以存储多种类型数据的内存空间, 空间大小由占用内存最大的成员决定.

同一时间只能使用一个成员(存储某一成员时, 会由于共用内存而影响其他成员)

定义方法:

union tag {
    type member1;
    ...
   	type memberN;
} var_name;

// 声明&定义
union tag var_name;

// 赋值
var_name.memberX = member_value;

位域

指定成员将使用的位数(需不大于其依附的类型)从而节约内存占用. 原内存空间不足存放新成员时, 会另起一块新的内存空间(大小取决于新成员依附类型)开始存放.

定义方法:

struct tag {
    type member1 : bits;
    ...
    type memberN : bits;
} var_name;

typedef关键字

用于定义数据类型的别名, 也可以通过该方法简化结构体数据的声明.

定义方法:

typedef struct tag {
    type member1;
    ...
    type memberN;
} struct_name;

// 声明&定义
struct tag var_name;
struct_name var_name;

const关键字

用于指明某变量不可重新赋值, 令其成为常量. 若尝试对const修饰的变量赋值则会引发错误(故通常需要在声明时就完成赋值), 观察const本身的行为, 类似对变量"写保护".

对于定义的常量, 编码规范要求其名称首字母应大写, 以提醒程序员"此为常量".

使用方法:

// 对常规变量使用
type const var_name = var_value;

// 对指针使用:
// 保护指针指向的变量(住在该地址的住户)不变, 但指针(地址)本身可变
type const *pointer_name = var_value;
// 保护指针(地址)不变, 但指向的变量(地址的住户)可变
type * const pointer_name = var_value;
// 同时保护指针及其指向的变量不变
type const * const pointer_name = var_value;

更常用的使用场景并非直接定义常量, 而是用于修饰函数的形参, 避免函数对传入的参数做不期望的改动:

return_type func_name(type const *pointer_param) {
    function body;
}

标签:name,pointer,C语言,学习,类型,var,type,变量
来源: https://www.cnblogs.com/travonD/p/15979835.html