C语言关键字详解

c语言共有32个关键字,下面详细介绍各个关键字及其使用方法

32个关键字分类

        1、数据类型关键字(12个)

char、short、int、long、signed、unsigned、float、double、

struct、union、enum、void

        2、控制语句关键字(12个)

循环控制:for、do、while、break、continue

条件语句:if、else、goto

开关语句:switch、case、default

返回语句:return

        3、存储类型关键字(5个)

auto、extern、register、static、typedef

        4、其它关键字(3个)

const、sizeof、volatile

下面详细介绍一下不同类型的关键字及其使用方法

关键字:声明类型或使用场景(开辟内存空间大小/注意事项)

1、存储类型关键字

char:声明字符型变量或函数(1字节)

        字符型变量,顾名思义是用来声明字符类型的及通过单引号括起来的;

        c语音中单引号用来表示字符型量;双引号用来表示字符串

下面是几个char关键字的例子

//程序
char a = 'a';
char b = "a";
char bb[] = "a";
char c = 1;
char d = 12345;
char e = 'abcd';
char f = 'abcde';
printf("a:%c\n",a);
printf("b:%c\n",b);
printf("bb:%s\n",bb);
printf("c:%d\n",c);
printf("d:%d\n",d);
printf("e:%c\n",e);
printf("f:%c\n",f);
//结果
a:a
b:$
c:1
d:57
e:d
f报错

可以看出char关键字定义字符型变量(a)时可以输出正确结果,而双引号为字符串,需要定义char类型的数组进行数据存储(bb)。

char也可以定义整形数据(c),而char的取值范围是有限的无符号类型为(0~255),有符号类型为(-128~127),所以当数值超出范围就会溢出,只保存未溢出的部分(d)。

字符型变量(e)写4个字节不报错而写大于4个字节就会报错,且小于4字节结果却输出最后一个字符的原因是“整形提升”,一般寄存器都是32位的,开辟小于32位的类型空间时只填满低8位,而高24为也开辟了,只不过未使用,所以如果你定义了4个字节的数据,就会把高24位填满,而显示只能显示低8为数据,而超出4字节就会出现内存空间不足而报错的问题。

char有三种不同的类型:单纯char、signed char、unsigned char。signed char和unsigned char 类型是用来声明数值的;单纯char类型是真正的字符类型,使用了声明字符的。

int: 声明整形变量或函数(2/4字节)

shot:声明短整形变量或函数(2字节

long:声明长整形变量或函数(4/8字节)

long long :通常为64位整数,提供最大范围

unsigned:声明无符号类型变量或函数

一元负号运算(-)运算不能使用在unsigned表达式内。

signed:声明有符号类型变量或函数

int或long数据类型是对应字节空间大小取决于编译器和操作系统,是由硬件所决定的,也就是你的电脑是32位还是64位系统。

short a = 1;//短整形,取值范围为signed short(-32768~32767)
             //                 unsigned short(0~65535)
int b = 1;//整形,取值范围为signed int(-2147483648~2147483647)
           //               unsigned short(0~4294967295)
long c = 1;
long long d = 1;
unsigned int e = 1;
signed int f = -1;

  任何数据在计算机中都必须转换为二进制。保存到内存中的数据是二进制数据的补码形式。

有符号数二进制表示形式为:符号位+数据位

有符号正数:源码 = 反码 = 补码

有符号负数:反码 = 在源码的基础上,符号位不变,其它位按位取反

                     补码 = 反码+1;

补码转换为源码的方式:

        1、先减一,然后符号位不变,其它位按位取反

        2、先符号位不变,其它位按位取反,再加一(在进行一次源码转补码操作)

float:声明浮点型变量或函数(4字节)

double:声明双精度变量或函数(8字节)

	float a = 1;
	float b = 1.2;
	float c = 1.23456789;
	double d = 1;
	double e = 1.2;
	double f = 1.23456789;
	printf("a = %f\n", a);
	printf("a = %.1f\n", a);//保留小数点后1位(.1f)
	printf("b = %f\n", b);
	printf("b = %.3f\n", b);//保留小数点后3位(.3f)
	printf("c = %f\n", c);
    printf("cc = %.8f\n", c);//保留小数点后8位(.8f)
	printf("d = %f\n", d);
	printf("e = %f\n", e);
	printf("f = %f\n", f);
	printf("f = %.8f\n", f);//保留小数点后8位(.8f)

结果:

a = 1.000000
a = 1.0
b = 1.200000
b = 1.200
c = 1.234568
cc = 1.23456788//?超出了取值范围(不确定)
d = 1.000000
e = 1.200000
f = 1.234568
f = 1.23456789

%f默认保留6位小数,不足位以0补齐,超过六位按四舍五入的方法保留6位,若想输出指定位数,在格式化输出语句中表示变量的字母及%中间的部分控制输出位数,小数点后是小数位数。

void:声明函数无返回值或无参数,声明无类型指针

void不能定义变量,空类型不知道开辟多少空间

void本身就被编译器解释为空类型,强制的不允许定义变量

c语言中,函数可以没有返回值,默认返回值是int类型

void修饰函数时的作用:1、占位符,让用户明确,不需要返回值

                                       2、告知编译器,返回值无法接收,即进行报错告警

指针未学到,但是保留空白

void*:void和指针结合使用

无类型指针,也称为空指针,可以指向任何类型的数据

注意:当我们需要使用void类型的指针变量去指向某一类型的1变量的时候,必须要对其进行类型转换

//方法一:
int *p1;
void *p2;
p1 = p2;
//方法二:
int *p1;
void *p2;
p1 = (int*)p2;

如果函数的参数可以是任意类型指针,那么应声明其参数为void *

void show(void *num)
{


}

void *用来设计通用接口

例如,memset()函数:初始化内存空间

enum:声明枚举类型

定义方式:enum 枚举类型名 {枚举值列表};

#include<stdio.h>
enum color {
	red,
	green,
	blue = 4,
	black,
	yellow=9,
	pink

};
int main()
{
printf("%2d,%2d,%2d,%2d,%2d,%2d\n", red,green,blue,black,yellow,pink);
}

结果:

 0, 1, 4, 5, 9,10
请按任意键继续. . .

枚举的意义:具有自我描述性(对程序员来讲)

#include <stdio.h>
 
enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;
int main()
{
    // 遍历枚举元素
    for (day = MON; day <= SUN; day++) {
        printf("枚举元素:%d \n", day);
    }
}

struct:声明结构体变量

结构体试讲一下零散的数据类型打包在一起,形成一个整体,来修饰一个大类,例如学生这个大类可以通到姓名(char)、年龄(int)、学号(char)、性别(char)等不同的数据类型进行修饰

#include<stdio.h>
struct str {
	char name[20];
	int age;
	char id[30];
	char sex[10];
}a;
int main()
{
	a.age = 12;
	strcpy(a.name, "XiaoLan");//数组也不能直接等号赋值,需要用strcpy函数拷贝
	printf("%d\n", a.age);
	printf("%s\n", a.name);

	struct str w;
	//w.name = "XiaoMing";//报错
	strcpy(w.name, "XiaoMing");//数组也不能直接等号赋值,需要用strcpy函数拷贝
	w.age = 10;
	printf("%d\n", w.age);
	printf("%s\n", w.name);

    return 0;

}

//结果为:
12
XiaoLan
10
XiaoMing
请按任意键继续. . .

注意:结构体只能整体初始化,不能整体赋值

union:声明共用体类型

共用体开辟空间的大小一定要可以整除至少一个变量的大小,且大于等于所有变量中开辟空间最大的那个变量所开辟的空间。

#include<stdio.h>
union Un//联合类型的声明,union是联合体关键字
{
	char c;//1字节
	int i;//4字节
};
int main()
{
    union Un u; 
    printf("%d\n",sizeof(u));
}
//结果为:

4


联合体(共用体)共用同一个开辟空间,而读取是就需要考虑是大小端问题了。联合体定义的两个变量的开始地址是相同的,也就是上面所述的c和i变量的开始地址是一样的。

小测试

int main()
{
    signed char a[1000];
    int i;
    for(i = 0; i<1000; i++)
    {
        a[i] = -1-i;
    }
    printf("%d",strlen(a));
    return 0;
}

答案是:255。计算机在存储数据时是保存数据的二进制补码形式,所以通过观察补码的变换形式来获取答案,strlen

函数遇见\0结束,所以到0就是最后的结果。

后续内容见下一篇博文。

  • 34
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
C语言关键字const用于声明一个常量,即变量的值在声明后不能再被修改。被const修饰的变量只能读取其值,不能修改。 在引用的代码中,第四道代码声明了一个指针p,该指针指向一个常量int型变量a。这意味着p所指向的值不能被修改,同时p本身也不能指向其他的变量。因此,对p进行赋值或者修改*p的值都是非法的操作。 在引用的代码中,const修饰的变量a被声明为常量,即a的值不能被修改。当尝试修改a的值时,编译器会报错。 总结起来,C语言关键字const用于声明常量,常量的值在声明后不能再被修改。常量可以修饰变量或指针,使其成为只读或只指向特定变量的指针。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [C语言关键字const详细讲解](https://blog.csdn.net/li1829146612/article/details/119636084)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [[C语言]const关键字详解](https://blog.csdn.net/yjlyyj/article/details/125259458)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [C语言关键字const和指针的结合使用](https://download.csdn.net/download/weixin_38499706/12743173)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白很低调

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值