C语言关键字有哪些,c语言关键字及其含义

  C语言关键字有哪些,c语言关键字及其含义

  博客明星评选

  在写作之前,我写了点点滴滴的谈了一些C语言关键词,今天想和大家分享一下。这些都是看一些视频解说和一些书总结出来的。里面的内容也比较深入,但是比较简单。有些事情我们有时不会注意到。我会尽我所能去报道它们。由于能力有限,如有错漏,敬请见谅。

  Void关键字先说一下你平时是怎么遇到void的。一般来说,有以下几种方式。

  告诉编译器这个返回值不能作为参数列表接收,告诉编译器或者程序员参数不能传递。//无返回值void func(int a){}//表示函数不需要传入参数int func 2(void){ return 0;}void可以定义变量吗?我们先来看看代码会不会报错。最后,我们来看看原理。

  int main(){ void a;返回0;}

  结果是显而易见的,所以我们不得不好奇为什么void不能定义变量。首先,我们要明白一件事。变量的存在需要给变量腾出空间来存储数据。虚空无法腾出空间。

  # include stdio . h int main(){ printf( % d \ n ,sizeof(void));返回0;}

  我们会发现,在VS2013中,void类型并没有打开空间,所以无法定义变量。可能有人对Linux环境感兴趣,我们来看看。代码同上,这里我给出结果。

  我们不难发现,void在Linux环境下开辟了一片空间。这是否意味着void可以在Linux环境下定义变量?对不起,这仍然是不可能的。即使Linux打开了一个空格,编译器也会认为它是空类型,禁止为它定义变量。

  那么Linux为什么能在什么环境下开拓空间呢?事实上,gcc编译器不仅支持C语言标准,还扩展了GNU程序。你有兴趣看这份文件。

  Void*总的来说,这是我们接触过的所有Void的应用。但是如果你已经用C语言模拟实现了qsort,你会发现另外一个应用,font color=red void* /font。我们也遇到过,在使用maollc或realloc打开空间时,最好把它们的类型强制转换成我们想要的指针类型。所以在这里我们会很好奇。malloc函数的返回类型是什么?为什么可以变成我们想要的任何指针类型?我们来看看它的功能。

  我们发现它的返回值是void,但是我们知道int*,float*,所以请告诉我什么是void?

  Void*也是一个指针。我们可以接受任何类型的指针或者强制类型转换为任何类型的指针,因为我们都知道在32位平台上指针是4字节,64位是8字节。我们不知道malloc要开辟的空间指向什么类型,但是可以强制类型转换。

  我们来看看void*在32位平台上占了多少字节。

  # include stdio . h int main(){ printf( % d ,sizeof(void *));返回0;}

  void*可以解引用吗?解引用的作用就是让指针变成对应的类型。我们开始怀疑void*是否也可以解引用。

  int main(){ //printf(%d\n ,sizeof(void));int a=0;void * pa=* pa返回0;}我们可以发现void*在Linux和Windows环境下都无法解引用。这一点非常重要。

  void*可以加减整数吗?我们需要仔细看看它能否加减帧整数。这里加1作为具体例子。如果它能加减整数,加1跳过几个字节?如上所述,它是在双重环境中测试的。

  int main(){ int a=0;void * pa=void * Pb=pa 1;printf(%d ,p b-pa);返回0;}在Windows环境下,void不打开空间。之前跳过的是带int*加1的4字节。当时=因为int本身占用了4个字节,所以void不会在Windows环境下打开空间。它怎么会跳呢?

  在Linux中很容易理解。void打开了一个空格,所以void* 1会跳过一个字节。

  Const关键字我想问一下,你在C语言中遇到过这个关键字词吗?你真的了解它的原理吗?或者你只是用它来修改一个变量?今天我就给大家展示一下它的详细用法。

  正如我们所知,Const修改变量。不就是修改一个变量让它font color=red常量变量/font吗?那请告诉我,是常量变量还是常数?怎么验证?

  首先,字体颜色=蓝色常量变量是一个变量,但它具有常量的属性,但其本质还是一个变量。/font,我们不支持C89标准下的变长数组,这意味着我们必须将数组的长度定义为常数。如果常量变量是常量,那么编译器不能报告错误。

  int main(){ const int cap=10;int arr[cap]={ 0 };返回0;}

  在Linux环境下,我们有两种常见的情况,分别列出。

  可以,可以编译运行。原因是除了C标准,Linux中也应用了GNU标准的C。

  int main(){ const int cap=10;int arr[cap];返回0;}

  错误报告:可变大小对象可能无法初始化,因为gcc支持可变长度数组,而可变长度数组无法初始化为。

  int main(){ const int cap=10;int arr[cap]={ 0 };返回0;}

  从这里可以看出,const修改的变量是变量,那么const不就是一个没用的东西吗?不不不我们有这种情况吗?我们定义了一个变量,不希望自己或别人修改它。我们做什么呢Const可以解决这个问题。

  int main(){ const int cap=10;cap=20//int arr[cap]={ 0 };返回0;}

  我们对常量修改变量的原理感到困惑。const修改的变量真的没办法改吗?如果不能修改,那它和一个常数有什么区别!所以可以修改。这里有一个修改方法。我不直接改变它的值,我找到它所在的空格,只改变它所在空格的内容,这样就可以间接修改const修改的变量。

  int main(){ const int cap=10;int * p=cap* p=20printf(%d\n ,cap);返回0;}

  此时,我们不得不考虑const原则。用const修改变量就像在家里放一袋黄金,我们把房子的门锁上,这样就不怕贼偷了。但是现在小偷非常聪明。由于我不能从门进去,但我看到窗户没有锁,我就从这里爬进去。虽然方式不同,但我还是得到了金子。const相当于门锁。

  const存在的意义1。修改时让编译器检查。

  2.让其他程序员看到,提醒他不要修改这个值。

  实常数我们刚刚讨论了变量。这里是什么是真正的常数。比如1,2,3.这些是常量,这里有一个字符串常量。

  Const不可修改是指编译器,而“abcdef”在字符串常量区,系统不允许修改。

  int main(){ char * p= hello ;//常量字符串* p= Hprintf(%c ,p);返回0;}

  Const和指针太简单了。这里我们需要看一下const的高级部分。在此之前,我们知道以下两个修改是相同的,所以

  const int cap=10int const cap=10那么我们可以通过const修改指针吗?让我们看看他们有什么不同。你能看出下面的代码有什么不同吗?

  int main(){ int a=0;const int * pa=int const * Pb=int * const PC=const int * const PD=return 0;}这是什么鬼?你没让我难堪吧,胖虎?别急,我们一个一个来分析。

  Const int pa=a和int Const pb=a,都是最接近font color=green /font的const,所以const在const int pa=a和int const pb=a中修改的是font color=red pa和pb不能解引用。/font

  int main(){ int a=0;const int * pa=* pa=10返回0;}

  Font color=蓝色,但是p可以指向另一个地址/字体

  int main(){ int a=0;int b=20const int * pa=pa=return 0;}

  int * const PC=a;在const中,pc是最近的,所以const修改pc,意味着pc可以对所指向的空间再次解引用赋值,但是不能再次指向其他空间。

  int main(){ int a=0;int b=20int * const pc=* pc=20pc=返回0;}

  const int * const PD=a;两者都是const修饰的,所以既不能解引用,也不能再次指向。

  int main(){ int a=0;int b=20const int * const pd=* pd=20pd=返回0;}

  总结:const靠近谁就装饰谁,谁又改不了。

  静态关键字:关于staic关键字,有很多东西想和大家分享。这太多了,我们不能忽视。即使是现在,我也需要借助之前的笔记来写这篇博客。我心里有一个。静态修改局部变量来改变它的生命周期而不改变它的作用域。下面是我总结的一些static的功能。

  修改局部变量修改全局变量修改函数修改局部变量静态修改局部变量改变其生命周期而不改变其作用域。我们先来看代码和现象。

  void fun(){ int a=1;//不要用静电装饰;printf(%d ,a);} int main(){ int I=0;while(I 10){ fun();我;} printf( \ n );返回0;}

  void fun(){静态int a=1;//静态装饰,程序运行前只初始化一次a;printf(%d ,a);} int main(){ int I=0;while(I 10){ fun();我;} printf( \ n );返回0;}

  从现象中可以看出,静态修改的变量的空间没有被破坏,否则不会打印出3 4 5.我们来证明一下,看看打印出来的价值是不是

  可以看出,A的值是一个确定的值,它的地址没有被破坏,所以我们可以得到静态改变的局部变量的生命周期。

  那么范围变了吗?-范围没有改变。

  为什么静态可以改变局部变量的生命周期?

  静态修改的局部变量会在全局数据区或者静态数据区(取决于编译器)打开空间,使得静态改变局部变量的生命周期。

  可以详细看一下C程序的地址空间。

  为什么函数和全局变量可以跨文件访问?

  在讲这个之前,我们需要讲一下多文件,为什么要定义几个文件?我们可以想象这样一个场景。我们写了很多函数,用函数的时候发现要花很长时间才能找到。有时候我们不知道函数的参数和返回值。我们能定义一个头文件并声明所有我们写的函数吗?h:我们称之为头文件,一般包含函数声明、变量声明、宏定义、头文件等。c:我们称之为源文件,一般包含函数实现,变量定义等。

  我们写的大型项目一般都是多文件项目,文件之间必须可以跨文件访问。否则无法跨档,所以“交互”的成本比较高。但是总有一些代码要隐藏,所以出现了关键字static。

  修改全局变量

  Font=由red static修饰的全局变量只能在这个文件中访问,而不能被外部文件直接访问。/font

  静态未修改

  用静电装饰

  全局变量有外部链接属性,被static修改后好像消失了。

  先不说这个。我们先来看看卡的情况。我们在test.c中定义一个函数,不做任何事情直接在main.c中调用,这段代码会报错吗?

  //test.c

  无效显示()

  Printf(你可以给我用\ n );

  //main.c

  #包含stdio.h

  int main()

  show();

  返回0;

  }

  我没有在mian.c中声明这个函数,为什么会有正确的关键字?这是怎么回事?这是因为该函数具有外部链接属性。当我们连接时,编译器会自动寻找这个函数。

  由static修改的函数和全局变量一样,只能在这个文件中访问,而不能被外部文件直接访问。

  静态未修改

  用静电装饰

  如何通过font color=redindirection /font访问static修改的函数?

  在静态修改函数的文件中,可以编写另一个函数来调用静态修改函数,然后可以通过调用外部文件中的函数来间接调用静态修改函数。

  静态修改局部变量,改变生命周期,但不改变范围。

  静态修改函数,目的是封装,提高代码的安全性。用户只能使用这个文件,不能随意修改里面的代码。静态提供项目维护和安全保护。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: