精华内容
下载资源
问答
  • 学会C语言可以干什么? 重点说明:本文章来自php中文网,仅供学习。 本文预计花费您一分钟的时间。 当你学会C语言之后你可以: (1)可以用C语言编写一些应用程序 (2)用C语言开发新的编程语言,这个可以做到的,...

    学会C语言可以干什么?

    本文预计花费您一分钟的时间。

    当你学会C语言之后你可以:

    (1)可以用C语言编写一些应用程序。比如一些有意思的小游戏,小程序等。
    (2)用C语言开发新的编程语言,但你要学好编译原理,例如我们现在用的python,php…这些语言都是用C语言写的
    (3)进行嵌入式开发。可以实现遥控灯,遥控赛车等。
    (4)编写操作系统,我们知道“大名鼎鼎”的Unix就是用C语言编写的,当然还有linux也是用C编写的。
    (5)维护。C语言工程师也要会对相关产品进行维护。
    另外,像Java,python,c#.等高级语言底层都是通过C语言来实现的,所以学好精通C语言在学习使用其他语言有很大帮助就能相对容易的。知道其内部的调用过程,最后写出高质量的代码。

    以上就是学好c语言可以干什么。

    展开全文
  • 跳出来跟这几个以前的老同事,拉了一个创业团队,准备一票,去之前也了解了一番,此次将使用C语言来开发,对于毕业之后一直从事C++面向对象思维编码的我来说,虽然不舍,但是仔细想了下,这都不是事,谁说用C语言...
  • argc,argv 那是用命令行编译程序时就有用 主函数main中变量(int argc,char *argv[ ])的含义 我们平时定义主函数时通常的写法为:int main( )或void main( ) 其实,int main( ) 只是 UNIX 及 Linux 默许的...
    像Turbo c++、VC++这些现成编译环境  可以不用理解这些
    argc,argv 那是用命令行编译程序时就有用
    
    主函数main中变量(int argc,char *argv[ ])的含义
    
    我们平时定义主函数时通常的写法为:int main( )或void main( )
    
    其实,int main( ) 只是 UNIX 及 Linux 默许的用法,
    main(int argc, char *argv[ ], char *env[ ])才是UNIX和Linux中的标准写法。
    
    * argc: 整数,用来统计你运行程序时送给main函数的命令行参数的个数 
    
    * argv: 字符串数组,用来存放指向你的字符串参数的指针数组,每一个元素指向一个参数 
      argv[0] 指向程序运行的全路径名 
      argv[1] 指向在DOS命令行中执行程序名后的第一个字符串 
      argv[2] 指向执行程序名后的第二个字符串 
      ... 
      argv[argc]为NULL。
    
    *env:字符串数组。env[ ]的每一个元素都包含ENVVAR=value形式的字符
    串。其中ENVVAR为环境变量,value 为ENVVAR的对应值。
    
    argc, argv,env是在main( )函数之前被赋值的,编译器生成的可执行文件,main( )不是真正的入口点,而是一个标准的函数,这个函数名与具体的操作系统有关。
    
    经典小例子,对于理解argv[ ]函数很管用:
    #include <stdio.h>;
    
    int main(int argc, char *argv[ ])
    {
      printf("%d/n",argc);
      while(argc)
      printf("%s/n",argv[--argc]);
      return 0;
    }
    
    假设将其编译为test.exe
    
    在命令行下
    〉test hello
    得到的输出结果为
    2
    hello
    test
    
    main(int argc, char*argv[ ]),其中argc是指变量的个数,本例中即指test和hello(注意,命令test也算在内)这两个变量,argc即为2
    
    argv是一个char *的数组,其中存放指向参数变量的指针,此处argv[0]指向test,argv[1]指向hello
    
    再例:
    #include<unistd.h> 
    #include<stdio.h> 
    
    int main(int argc,char *argv[ ]) 
    { 
      if(argc==1 || argc>2) 
      {printf("请输入想要编辑的文件名如:fillname");} 
      if(argc==2) { printf("编辑 %s/n",argv[1]); } 
      exit(0) 
    } 
    
    编译该程序:gcc -o edit edit.c 
    运行:〉edit 
    结果:请输入想要编辑的文件名如:fillname 
    运行:〉edit f1.txt 
    结果:编辑 f1.txt 
    
    执行edit时,argc为1,argv[0]指向edit
    而执行edit f1.txt时,argc的值为2,argv[0]指向edit,argv[1]指向f1.txt
    展开全文
  • C语言的语法极其简洁,即使初次接触编程语言的初学者也能很快学完它的语法。不过,C语言一门“灵活得过了头”的编程语言,对于很多初学者来说,编写C语言程序就好像拿着一堆最基本的砖块,要修建一座大厦一样...

    C语言的语法极其简洁,即使是初次接触编程语言的初学者也能很快学完它的语法。不过,C语言也是一门“灵活得过了头”的编程语言,对于很多初学者来说,编写C语言程序就好像拿着一堆最基本的砖块,要修建一座大厦一样,茫然找不到方向。

    06a9df81e1c049dff4f30fed9077df78.png茫然找不到方向

    奇怪的C语言代码

    对于初学者来说,阅读项目源代码是学习和巩固C语言编程能力的一个好方法——从前辈们的一些优秀C语言项目中,我们能够学到很多编写程序方面的思考方式,也就是一些程序员所谓的“编程思维”,看得多了,编写C语言程序自然就手到擒来了。

    不过虽然C语言的语法简单,但是我们总会看到一些令人迷惑的代码,例如下面这个函数,它来自某个开源项目,为了讨论主题,我将一些不相关的细节略去了:

    void *fun(void *ud, void *ptr, int size){

    (void) ud;

    (void) size;

    // 其他代码,未用到 ud 和 size 参数

    ...

    }

    fun() 函数中省略掉的代码没有使用到 ud 和 size 参数,这里有两个问题:一是既然用不到这两个参数,为什么不删去它们呢?再就是两个参数前的 (void) 类型转换有什么用呢?

    1f074e7212e1ae0f490d8ee242454292.png为什么不删除多余参数呢?

    首先考虑第一个问题

    前文提到 fun() 函数来自一个C语言程序开源项目,该项目比较复杂,但是我们知道再复杂的程序项目也是一行一行代码敲出来的,而且,在后续的开发中,可能会修改之前的设计。明白这一点,要回答第一个问题就简单了。

    可能在之前的设计中,fun() 函数是用到了 ud 和 size 参数的,只是后来的设计发现 fun() 函数不必使用这两个参数,但是发现整个C语言项目由大量使用 fun() 函数的代码。

    如果删去这两个参数,那么 fun() 函数的原型就改变了,开发人员将不得不逐个修改整个C语言项目中所有调用 fun() 函数的代码,这样的工作量巨大,极其容易给C语言项目引入 bug。因此,倒不如继续保留 fun() 函数的原型不变了。

    另外,读者应该已经知道C语言是不支持重载的,因为如果该C语言项目需要使用 fun() 函数对接某些 API,那么fun() 函数就必须符合 API 指定的原型,因此 fun() 函数中有未使用的参数其实是“身不由己”的。

    b9be411e1f3edfe432502c7956d23e04.png“身不由己”

    还有一种情况,fun() 函数可能是某个“函数家族”里的一个,该“函数家族”由一个统一的函数指针管理(为了方便,以及提高效率,实例可参考我之前文章。),因为“统一的函数指针”类型是固定的,所以 fun() 函数的原型必须符合该函数指针的原型,所以,即使 fun() 函数用不到 ud 和 size 参数,也是不能将其删除的,否则就无法通过“统一的函数指针”调用 fun() 函数了。

    当然了,也有可能纯粹是因为开发人员懒得修改 fun() 函数原型。现在明白了第一个问题,再来考虑第二个问题。

    为什么要在未使用的参数前添加 (void) 呢?

    在解答这个问题之前,我们先做一个实验:编写下面这段C语言代码,也即删去 (void)ud 和 (void)size:

    void *fun(void *ud, void *ptr, int size){

    // 其他代码,未用到 ud 和 size 参数

    ...

    在编译这段C语言代码时,编译器常常会给出下面这样的“参数未使用(unused parameter)”警告信息:

    t.c: In function ‘fun’:t.c:3:22: warning: unused parameter ‘ud’ [-Wunused-parameter]

    799389a467af99edf166e2e987e61521.png忽略编译器发出的警告信息,是非常不好

    很多C语言程序员会忽略编译器发出的警告信息,但这是非常不好的习惯,解决警告信息能够帮助我们最大程度地避免最终C语言程序出现bug。要解决“参数未使用(unused parameter)”警告信息,最直接的方法就是使用它了:

    void *fun(void *ud, void *ptr, int size){

    ud;

    // 其他代码,未用到 ud 和 size 参数

    ...

    }

    但是编译器又会给出“C语言语句无效”的警告信息:

    t.c:5:5: warning: statement with no effect [-Wunused-value]

    ud; ^~

    为了避免出现这样的警告信息,我们当然可以对 size 和 ud 参数做一些其他操作,例如:

    void *fun(void *ud, void *ptr, int size){

    ud = (void *)size;

    // 其他代码,未用到 ud 和 size 参数

    ...

    }

    可是这样虽然能够避免C语言编译器发出警告,但是这样会让其他阅读代码的程序员费解:“NND,ud = (void *)size;这句到底什么意思呢?”

    因此,避免编译器发出参数未使用的警告信息,最好不要像上面这样操作,采用 (void) 操作更好:

    void *fun(void *ud, void *ptr, int size){

    (void) ud; (void) size;

    // 其他代码,未用到 ud 和 size 参数

    ...

    }

    C语言程序员都知道 void 表示空,因此(void)ud 和(void)size 显然表示不关心 ud 和 size 的操作。这样一来,我们的意图一眼就能看出,而且还能避免编译器发出警告信息。

    小结

    在C语言程序开发中,定义函数时,有时会不可避免的定义一些使用不到的参数,这时编译程序时,编译器往往会发出警告信息。C语言程序员不应该忽视每一个警告信息,因此可以借助 (void)操作屏蔽掉这样的警告信息,以免更重要的编译器警告被淹没在信息流里。

    be96eea8ea28b69ee8f30eda1ec5d9b2.png点个赞再走吧

    欢迎在评论区一起讨论,质疑。文章都是手打原创,每天最浅显的介绍C语言、linux等嵌入式开发,喜欢我的文章就关注一波吧,可以看到最新更新和之前的文章哦。

    未经许可,禁止转载。

    举报/反馈

    展开全文
  • //在内存空间中找出4字节(32位系统)或8字节(64位系统)的内存空间,把这块内存空间命名为p,//这块内存中存放的NULL(0)然后呢,能它来干什么呢?可以对其它变量进行操作*加上指针就能代表指针所指向的那片内存*...

    指针是一种数据类型

    请务必把指针当作一种变量对待,因为它就是。

    当你声明一个指针变量的时候是在做这么一项工作:

    int *p = NULL;

    //在内存空间中找出4字节(32位系统)或8字节(64位系统)的内存空间,把这块内存空间命名为p,

    //这块内存中存放的是NULL(0)

    然后呢,能用它来干什么呢?

    可以对其它变量进行操作

    用*加上指针就能代表指针所指向的那片内存

    *p相当于通过地址(p变量的值)找到一块内存,然后操作内存

    *p放在等号的左边赋值(给内存赋值,写内存)

    *p放在等号的右边取值(从内存获取值,读内存)

    //这是通过指针修改其它变量

    int *p = NULL;//声明一个指针

    int arr[100] = {0};//声明一个数组,里头全是0

    p = &arr[3];//p指向arr[3]

    *p = 4;//更改p所指向内存的值

    printf("arr[3] = %d\n",arr[3]);

    //这是通过指针获取其它变量

    printf("*p = %d\n", *p);

    16cea14342ee1b9470bdaaa5428bba28.png值得注意的是3)指针变量和它指向的内存块是两个不同的概念。

    注意!!!!!!

    规则1: 给p赋值p=0x1111; 只会改变指针变量值,不会改变所指的内容;

    p = p +1; //p++

    规则2 :给*p赋值 *p=‘a’; 不会改变指针变量的值,只会改变所指的内存块的值

    规则3 := 左边 *p 表示 给内存赋值, = 右边 *p 表示取值,含义不同切记!

    规则4 :保证所指的内存块能修改,例如NULL

    --------------------------------------------------------------------------------------------------------------

    那么既然指针是个变量,指针++又会怎么样呢?

    对于一个int 型变量如,++过后它会增大1

    int a = 10;

    a++; //a = 11

    而一个指针变量,++过后它也会增大,不过增大方式有些特别

    指针步长(p++),根据所致内存空间的数据类型来确定。

    int *p = NULL;

    int b = 10;

    p = &b;

    p++; //p = p+sizeof(b)

    举一个更明显的例子

    #define _CRT_SECURE_NO_WARNINGS

    #include

    #include

    #include

    int main(void)

    {

    int *p = NULL;

    int a = 10;

    p = &a;

    //p+1增大4(sizeof(a)),p+2增大8(sizeof(a)*2)

    printf("p = %d, (p+1) = %d, (p+2) = %d\n",p,p+1,p+2);

    system("pause");

    return 0;

    }

    b78e615afb35ef43ea15ead8acccd1f2.png所以当我们改变指针的值的时候,就是在改变它的指向,指针相当于是一个外卖订单,你点了什么(那块内存),写到订单上(指针指向内存),店家看到后给你做(操作变量)。

    #define _CRT_SECURE_NO_WARNINGS

    #include

    #include

    #include

    int main(void)

    {

    //饭馆的饭都有啥?

    char *food[] = {"蒸羊羔","蒸熊掌","蒸鹿尾儿","烧花鸭",

    "烧雏鸡","烧子鹅","卤猪""卤鸭",

    "酱鸡","腊肉","松花","小肚儿",

    "晾肉","香肠儿","什锦苏盘儿",

    "熏鸡白肚儿","清蒸八宝猪"

    "江米酿鸭子","罐儿野鸡","罐儿鹌鹑",

    "卤什件儿","卤子鹅","山鸡","兔脯","菜蟒",

    "银鱼","清蒸哈士蟆","烩腰丝","烩鸭腰",

    "烩鸭条","清拌鸭丝儿","黄心管儿","焖白鳝",

    "焖黄鳝","豆豉鲶鱼","锅烧鲤鱼","锅烧鲶鱼",

    "清蒸甲鱼","抓炒鲤鱼","抓炒对虾","软炸里脊","软炸鸡" };

    //订多少个菜?

    int n = sizeof(food) / sizeof(food[0]);

    //下订单

    char *p = NULL;

    //我要吃这些

    for (int i = 0; i < n; i++)

    {

    p = food[i];//大厨看订单

    printf("%s ",p);//做饭

    }

    system("pause");

    return 0;

    }

    64c7c532fd67f6f0fb4c2a83b0fa9b8e.png

    当然一个订单上你写什么菜都行,只要人家店里有,也就是说你不能操作不归你管的内存,比如NULL (给*NULL赋值非法) ,你也别随便给一个指针赋完值就用,最后检验一下不然容易出错。

    比如说最常见的,malloc一块内存空间,通过指针的值检查一下是否成功

    int *p = (int *)malloc(24);

    //检验是否分配成功

    if(p != NULL)

    {

    //具体操作

    }

    标签:变量,int,C语言,++,内存,简单,NULL,指针

    来源: https://blog.csdn.net/weixin_42182035/article/details/99882637

    展开全文
  • while ((status = scanf("%d", &code)) != 1 || (code || code>5)) { if (status != 1) ... 书上说是处理非整数输入,网上找了半天也没找到%*s时干什么用的c primer plus第六版,第9章,265页
  • C语言都能用来吗、我为什么要学C语言

    万次阅读 多人点赞 2016-12-02 23:06:54
    最近在学C语言,可是越学习就越觉得迷茫,不知道我能它来干什么? 现在总结一下很多网友的回答,给大家一些参考!  一 、 c语言是计算机技术的基础,是信息技术的基础,是自动化技术的基础,是很多电子...
  • 首先来说说他们各自的历史:C语言的发展历史 C语言的发展颇为有趣。...意思将CPL语言煮,提炼出它的精华。并且他B语言写了第一个UNIX操作系统。 而在1973年,B语言也给人“煮”了一下,美国贝尔实验室的D.M
  • C语言是女的

    2011-07-11 10:56:00
    1.无论你让她干什么,她绝对不可能自己找到方法。 2.总是复杂的方法解决简单的问题。 3.不可能自主认识到本身错误。 4.浪费时间十分正常的事情。 5.无论跟她说什么,都得她能理解的方式做充分说明。 6....
  • 这个题目的题中首先给出了一个代数表达式,然后列出了若干选项,每个选项也一个代数表达式,题目的要求判断选项中哪些代数表达式和题中的表达式等价的。这个题目手算很麻烦,因为明明对计算机编程很感兴趣...
  • C语言--函数是什么

    2015-02-24 20:00:16
    函数是C语言的重点难点之一,在刚开始学习函数的时候,很是不理解它究竟是干嘛的,随着知识的不断积累,大量的练习,有一种豁然开朗的感觉,其实函数就是把一堆经常用到的知识点一个名字来命名的一个称谓,例如:...
  • 汽车软件这一行的都知道MBD基于模型的设计,通常就是Simulink去搭建模型来实现控制算法。对于专注于控制算法的策略工程师而言,完全不会用到C语言。 但是编译器无法将Simulink模型编译为Hex文件刷到ECU中的...
  • 1. 无论你让她干什么,她绝对不可能自己找到方法。 2. 总是复杂的方法解决简单的问题。 3. 不可能自主认识到本身错误。 4. 浪费时间十分正常的事情。 5. 无论跟她说什么,都得她能理解的方式做充分说明。 ...
  • ![除了VS本体之外,还安装了好多其他的插件,请问这些插件都是用来干嘛的呢?...microsoft visual studio 2013 安装后安装了好多插件,请问这些分别都是干什么用啊?我只是写C语言的小程序而已,有可以删除的插件吗?
  • 更糟的逐青无法占领它,不知道到底需要多久,逐青才能剩下的兵力摧毁要塞,赢得游戏。 不过希望还是有的,敌人要塞只守不攻,更好的生化学家可以 仅存的仪器克隆现有的士兵来增加士兵的数量,不过也有一定...
  • 问:redis是什么东西?他可以存储哪些东西? 答:redis一个Nosql型数据库,以key-Value型存储,基于内存(所有数据都放到内存中)但可以以日志和快照的形式持久化存储在硬盘中,当机器故障时,数据不会丢失,...
  • 用C语言位运算解决只出现一次的数字I II III

    千次阅读 多人点赞 2021-04-05 17:20:34
    这些知识对下面的解题都非常重要,一定要熟练掌握,不然等会会有一种“我在哪,我谁我在干什么”的感觉。 只出现一次的数字I 题目描述 只出现一次的数字 给定一个非空整数数组,除了某个元素只出现一
  • 详细解读用C语言编写的 “扫雷”程序

    千次阅读 多人点赞 2018-04-12 16:55:55
    用C语言编写的扫雷程序刚刚开始学了一个月的C语言,应该算是程序员中最基础最弱的了。所以写的这个扫雷程序有什么问题的地方,请各位大佬指点指点。那我就从第一步开始介绍起:编写前首先得有大致的思路吧,就是第一...
  • C语言的意义

    2010-01-27 20:04:00
    这一篇文章很重要,虽然我不写技术,但是我觉得大部分的童鞋还根本不了解C语言是干什么的,学C语言有什么用,纯粹的把它当做学习其他语言的“跳板”,认为它是一种“过时的”语言,这也就是我在序言中说的很多童鞋被...
  • 关于C语言的那些事儿

    2019-06-29 18:29:38
    也许你没有参加过C语言的课程,但你一定听说过它。...在开始之前,我们要从一个大的角度来介绍一下编程语言是干什么的。我们一句话来总结:编程语言是人类与机器打交道的桥梁,充当翻译官。 喜欢看谍匪片的同学对...
  • Objective-C干什么用? 主要用于IOS设备和MACOS应用程序的开发语言 案例集面向谁? 主要面对高校以及一些对Objective-C零基础的人群。 目录 ocprj1 这个案例关于基础知识的案例之基本数据类型使用以及输入输出...
  • C语言运算符

    2018-11-25 13:19:57
    重新翻了遍c语言,觉得对c语言运算符结合性有必要提...它们是干用的?它们是什么时候用的? 本文将围绕这几个问题展开.. (小白文,大神绕道) 先附录几个自己学习过程中的参考网站。(有些见解和例子来自一下网站) ...
  • 忽略点一:C语言能够干什么?它的优势在哪? 首先,这我们在学C语言前就应该了解的。总觉得大学的课程缺少一个体系,学完了之后,不知道能它来做什么,或者说不知道它处理什么东西好。 这我刚开始学C语言...
  • C语言

    2010-12-19 12:22:00
    ”如果你们觉得不够,可以咱们的课本,一样的,如果你打算学嵌入式,那么多花点时间看c,如果想学编程,c是入门,看了c之后了解编程到底是干什么的就好了,花一两个月把基本语法看看就ok了。 这个阶段你要...
  • 1.无论你让他干什么,她绝对不可能自己找到方法; 2.总是复杂的方法解决简单的问题; 3.不可能自主认识到本身错误 ; 4.浪费时间十分正常的事情 ; 5.无论跟她说什么,都得她能理解的方式做充分说明; 6.只要...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 424
精华内容 169
关键字:

c语言是干什么用的

c语言 订阅