首页 > 其他分享 >C语言学习日志2-关键字i

C语言学习日志2-关键字i

时间:2024-06-08 13:44:11浏览次数:20  
标签:函数 int register 内存大小 C语言 关键字 日志 sizeof 变量

1.1,最宽恒大量的关键字----auto
auto:它很宽恒大量的,你就当它不存在吧。编译器在默认的缺省情况下,所有变量 都是 auto 的。

1.2,最快的关键字---- register
register:这个关键字请求编译器尽可能的将变量存在 CPU 内部寄存器中而不是通过内 存寻址访问以提高效率。注意是尽可能,不是绝对。
就是因为速度。寄存器其实就是一块一块小的存储空间,只 不过其存取速度要比内存快得多。

1.2.2,使用 register 修饰符的注意点
register 变量必须是 能被 CPU 寄存器所接受的类型。意味着 register 变量必须是一个单个的值,并且其长度应小 于或等于整型的长度。 而且 register 变量可能不存放在内存中,所以不能用取址运算符“&” 来获取 register 变量的地址。

1.3,最名不符实的关键字----static
1.3.1,修饰变量
第一个作用:修饰变量。变量又分为局部和全局变量,但它们都存在内存的静态区。
静态全局变量,准确地说作用域是从定义之处开始,到文件结尾处结束,在定义之处前面的那些 代码行也不能使用它。想要使用就得在前面再加 extern ***。
静态局部变量,在函数体里面定义的,就只能在这个函数里用了,同一个文档中的其他 函数也用不了。即使这个函数运行结 束,这个静态变量的值还是不会被销毁,函数下次使用时仍然能用到这个值。

举例:
static int j;

void fun1(void)
{
static int i = 0;
i++;
}

void fun2(void)
{
j = 0;
j++;
}

int main1()
{
for(k=0;k<10;k++)
{
fun1();
fun2();
}
return 0;
}
i 和 j 的值分别是什么,为什么?
i=10;j=1;i在函数内声明,是静态局部变量,定义处不销毁其之前的值;而j是静态全局变量,在子函数中,不是定义,故正常进行之后操作,改变其值

1.3.2,修饰函数
第二个作用:修饰函数。函数前加 static 使得函数成为静态函数。但此处“static”的含义 不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。

1.4.1,数据类型与“模子”
在 32 位的系统上 short 咔出来的内存大小是 2 个 byte;int 咔出来的 内存大小是 4 个 byte;long 咔出来的内存大小是 4 个 byte;float 咔出来的内存大小是 4 个 byte; double 咔出来的内存大小是 8 个 byte;char 咔出来的内存大小是 1 个 byte。

1.4.2,变量的命名规则
【规则 1-1】命名应当直观且可以拼读,可望文知意,便于记忆和阅读。
【规则 1-2】命名的长度应当符合“min-length && max-information”原则
【规则 1-3】当标识符由多个词组成时,每个词的第一个字母大写,其余全部小写。
【规则 1-4】尽量避免名字中出现数字编号,如 Va l u e 1 , Va l u e 2 等,除非逻辑上的确需要编 号。
【规则 1-5】对在多个文件之间共同使用的全局变量或函数要加范围限定符(建议使用模块名 (缩写)作为范围限定符)。(GUI_ ,etc)
【规则 1-6】标识符名分为两部分:规范标识符前缀(后缀)+ 含义标识 。非全局变量可以 不用使用范围限定符前缀。

1.5,最冤枉的关键字----sizeof
1.5.1,常年被人误认为函数
sizeof 在 计算变量所占空间大小时,括号可以省略,而计算类型(模子)大小时不能省略。

1.5.2,sizeof(int)p 表示什么意思?
sizeof(int)
p 表示什么意思?
留几个问题(讲解指针与数组时会详细讲解),
32 位系统下: int p = NULL;
sizeof(p)的值是多少?
sizeof(
p)呢?
int a[100];
sizeof (a) 的值是多少?
sizeof(a[100])呢?//请尤其注意本例。
sizeof(&a)呢?
sizeof(&a[0])呢?

int b[100];
void fun(int b[100])
{
sizeof(b);// sizeof (b) 的值是多少?
}

标签:函数,int,register,内存大小,C语言,关键字,日志,sizeof,变量
From: https://www.cnblogs.com/robinly/p/18233105

相关文章

  • C语言学习日志1-定义与声明
    什么是定义:所谓的定义就是(编译器)创建一个对象,为这个对象分配一块内存并给它取上一个名字,这个名字就是我们经常所说的变量名或对象名。一个变量或对象在一定的区域内(比如函数内,全局等)只能被定义一次,如果定义多次,编译器会提示你重复定义同一个变量或对象。什么是声明:有两重含......
  • C语言 比较mac
    cilium1.15.1把单个mac拆分成2个整数,做减法比较。#include<stdio.h>unionmacaddr{ struct{ __uint32_tp1; __uint16_tp2; }; __uint8_taddr[6];};static__always_inlineinteth_addrcmp(constunionmacaddr*a, constunionmacaddr*b){ i......
  • 【C语言】动态内存经典笔试题(上卷)
    前言本系列将详细讲解4道有关动态内存的经典笔试题,以助于加深对动态内存的理解。这些题目都非常经典,你可能随时会遇到它们,所以非常重要。本文讲解其中的前两题。第一题这个程序运行的结果是什么?voidGetMemory(char*p){p=(char*)malloc(100);}voidTest(......
  • C语言详解(动态内存管理)1
    Hi~!这里是奋斗的小羊,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎~~......
  • 解决C语言中scanf函数无法输入直接跳过的问题
    如果比较急的话,可以直接用这些方法,不急的话,建议读完。方法:1、看在调用该scanf函数前有没有用键盘输入过数据,有的话,可以尝试在该scanf函数前加个getchar();吃掉'\n'。2、在scanf前加一句"rewind(stdin);"(双引号里面的语句,不要把双引号也复制或打上去了),或者"fflush(stdin);",后......
  • C语言-----数组
    简单了解数组的知识以及数组的运用一、数组的概念二、一维数组1. 一维数组的创建与初始化2. 一维数组的使用三、二维数组1. 二维数组的创建与初始化2. 二维数组的使用四、用sizeof计算数组元素的个数一、数组的概念    数组可以说是目前为止学到的第......
  • c语言基础问题:1瓶汽水1元,2个空瓶可以换一瓶汽水,20元可以喝多少瓶汽水?
    老师布置的小组作业,好像是曾经的蓝桥杯题目,自己琢磨一下写出来了,写都写了还都加了注释,就想着不如发到这上面了,有遇到类似问题的可以看看,代码比较笨但是很好理解。#include<stdio.h>intmain()//1瓶汽水1元,2个空瓶可以换一瓶汽水,20元可以喝多少瓶汽水?{ intyuan=20;//本金......
  • 最大公约数(gcd())和最小公倍数(lcm())的c语言和c++详细解法
    最大公约数(gcd())和最小公倍数(lcm())最大公约数:定义:两个或多个整数共有的约数中最大的一个。例如:整数12和18,他们的公约数有1、2、3、6,其中最大的公约数是6。c语言解法:辗转相除法和更相减损法1、辗转相除法:思路:先求解较大的数除以较小的数的余数,再用较小的数除以前......
  • Linux下的C语言编程(指针)
    目录1一级指针1.1定义1.2指针的内存大小1.3指针的偏移1.3.1加法偏移1.3.2减法偏移2二级指针2.1定义2.2如何理解二级指针3三级指针3.1定义4数组和指针的关系4.1一维数组与指针的关系4.1.1数组名的性质4.1.2数组名与指针的地址偏移4.2二维数组与......
  • 成为MySQL DBA后,再看ORACLE数据库(七、日志体系)
    说起数据库的日志,一般有redo日志、归档日志、错误日志、审计日志等,不同的数据库为了满足其特定的功能会有不同类型的日志。在ORACLE的日常运维中,可能接触得最多的就是redo日志、归档日志、告警日志、闪回日志这几种日志。在ORACLE知识体系中,一般把redo、undo、checkpoint这几个知......