在此记录一些常见的C语言错误,可以当作学习C语言的笔记,需要的时候可以回过头看看。

1.关于“++”

#include
int main()
{
int a,b,cd;
a=10;
b=a++;
c=++a;
d=10*a++;
printf("a=%d b=%d c=%d d=%d\n",a,b,c,d);
return 0;
}

关于自加自减运算符用于句话就可以总结:a++先使用后自加,++a先自加再引用。这样就可以轻松得出结果:

edsionte@edsionte-laptop:~/code$ ./test
a=13 b=10 c=12 d=120

2.交换变量
第一种方法即中间变量法,下面说明第二种,不添加中间变量:

int a=1,b=2;
a=a+b;
b=a-b;
a=a-b;

3.char* str=”hello world”; sizeof(str)=12,strlen(str)=11.因为strlen函数求字符串长度时不包含字符串末尾的’\0’。

4.char a[10];int len=strlen(a); len其实不等于10,应该注意strlen求的是从字符串第一个元素到‘\0’之间字符总数(不包含‘\0’),而此数组未初始化。尽管语法上是正确的,但是用法错误。如果换作sizeof(a),结果便是10。

5.int(*s[10])(int) 表示什么?

这个语句看起来很复杂,不过我们一步步来分析。首先s[10]是一个数组,*s[10]说明他的元素是指针。那种类型的指针呢?整体来看这个语句:int(*)(int),不用多说是函数指针。那么进一步说就是,s[10]是一个有10个元素的指针数组,每个元素都指向一个函数,并且这个函数有一个int参数,并且返回int型的值。这样看好像很麻烦,不久是一个指针数组吗,何必这么麻烦。为了好理解,我们可以这么看:int(*)(int)  s[10]。

类似的对于数组指针,我们也可以这么理解,以便加深记忆。比如int (*s)[10];s是一个指向数组的指针,这样定义一个指针说实话很难让人理解。那么我们不要被他这个样子而迷惑,那就这么理解吧:int (*)[10] s;这样很符合一般指针定义的规则。

6.如下语句:

char* dest=”hello,world”;

char* src=”hello”;

puts(strcpy(dest,src));

这样做是错误的,原始是因为dest指向字符串常量,不可修改其某个字符值。其实正确的写法应该是const char* dest=”hello,world”;但是一般情况下不加const编译的时候也不会出错。但是如果dest[2]=’a’;那么就会出错,即便这条语句合乎语法。如果 char a[100]; char* dest=a;因为数组中的元素是变量,可以修改,也就可成功打印。如果有下面语句:char str[100]=”hello,world”,这样写完全正确,因为只是用hello world初始化这个数组而已。

7.想要输入下面一段字符串:edsionte is a goog boy。用scanf函数是不行的。因为scanf函数以回车键和空格键作为字符串输入结束的标志。而gets函数则仅以回车键作为字符串输入的结束符。因此可以使用gets函数来接收含有空格键的字符串。

8.宏定义和预编译不属于c语言语句,因此不已;结尾。而结构体定义属于c语言语句,应该以分号结尾。

9.共用体内可以定义多个不同类型的成员变量 ,但是每次只能使用一个变量。即这些变量共同使用一段内存空间,这段内存空间的大小由这些变量中长度最长的变量决定。

10.对于int a[5]这个数组来说,a,&a,&a[0],a+1,&a+1,&a[0]+1各代表什么?

a:a是这个数组的名称,它代表数组首元素的首地址,也就是a[0]的首地址。

&a:是数组的首地址。注意如果打印a和&a的值,两者是一样的,但是意义不同。

&a[0]:a[0]的首地址,等价于a。

a+1:数组中下一个元素的地址,即a[1]的地址。

&a+1:这是一个指向下一个数组的指针,这个数组是一个长度为5的整型数组。

&a[0]+1:等价于a+1。

11.在一般的32位机当中,指针类型均为4个字节,即便这个指针指向一个字符,因为指针说到底还是地址。对于一个数组int a[10],那么sizeof(a)=10*4;但是如果p是一个指向此数组的指针,那么sizeof(p)就是4。

12.给一个指针加上一个整数与给该指针的二进制表示加上同样的整数含义是不同的。比如int a[10];int *p=a;那么p+1指向的是这个数组的第二个元素,并不是在a[0]元素的首地址上加1。

13.定义一个枚举类型的变量:

enum return_value
{
    RET_TURE;
    RET_FALSE;
    RET_RANDOM;
}

枚举类型中每一个枚举常量都是用标示符表示的整形常量。上述枚举类型中的各个枚举常量并未赋值,但是默认值依次为0,1,2。

C语言笔记本的更多相关文章

  1. Netflix 开源 Polynote:对标 Jupyter,一个笔记本运行多种语言

    谈到数据科学领域的开发工具,Jupyter 无疑是非常知名的一种.它具有灵活高效的特点,非常适合进行开发.调试.分享和教学.近日,Netflix(奈飞)居然也玩起了跨界,他们开源了一个名为 Polyn ...

  2. GeneXus笔记本—GeneXusIDE如何切换成中文语言

    嘛 有些人可能比较习惯英文IDE,但是有些人就比较难受 所以为了应对各个地区的差异 GeneXus很人性化的自带了一部分国家的语言包 只不过默认是英文 需要改动一下_(:з」∠)_ 右键你的IDE快捷 ...

  3. C语言---volatile(我的工程笔记本)

    一般说来,volatile用在如下的几个地方: 1.中断服务程序中修改的供其它程序检测的变量需要加volatile: 2.多任务环境下各任务间共享的标志应该加volatile: 3.存储器映射的硬件寄 ...

  4. C语言---return(我的工程笔记本)

    迷惑了一天  函数就是输出有问题,进入函数设置密码的时候,当我保存密码准备返回,问题就在此时诞生了,界面是主界面,但功能函数还是没反应,设置序列号初始值的原来按键却还是有反应,莫名其妙,莫名其妙... ...

  5. C语言拾遗(一)

    越来越体会到C语言的重要性,不管是在计算机底层的理解上,还是在算法数据结构上,所以遂决定重新拾起C语言,不定期更新一些知识点. 推荐博客:http://blog.csdn.net/itcastcpp ...

  6. 笔记本win8,mac10.10,ubuntu,android四系统安装

    前言,最简单的是win8和ubuntu 最难啃的是mac android版只是要注意一个小技巧,目前算是独创 (被android坑了一次,两块硬件,android版把500Gntfs的硬盘整个识别为一 ...

  7. X86上搭建交叉工具链,来给龙芯笔记本编译本地工具链(未完待续)

    故事的背景是,我买了一台龙芯2F的笔记本来装B. 为什么说是装B呢?因为不但操作系统是Linux,而且CPU还是龙芯的. 一般人有这么酷的装备吗?简直是装B大圣啊. 这里一定要申明一点,本人不是IT技 ...

  8. 小试牛刀C#作为脚本语言执行解密

    背景 我们知道Unity3d是通过C#脚本语言的形式来实现游戏的逻辑代码编写,同样SCOTT服务器也设置了通过C#脚本来实现游戏逻辑,但是本文并不是想真正分析解密他们的运行机制,只是想通过自己的一个需 ...

  9. C语言的函数

    "函数"在英文的翻译是"function",无论在自然科学还是计算机科学都是这个词,而"function"的本意是"功能" ...

随机推荐

  1. Java基础(九):抽象类

    在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类除了不能实例化对象之外, ...

  2. ComboxEdit 重要属性

    DisplayMember="ComboItemName" ValueMember="ComboItemCode"IsTextEditable="Tr ...

  3. 【UI设计】扁平化设计之流行色值

    收集了一些颜色值 顏色表示方法: 以命名方式定义经常使用的顏色,如color="green".可是自由度较低,何况单词量...... 以RGB值表示.如#FF0000表示red(红 ...

  4. OpenNMS编译,打包并在Windows下启动

    1.Download Opennms latest source code 2.Download latest Java JDK and install it. Set JAVA_HOME path ...

  5. 遭遇java.lang.NoClassDefFoundError: org/apache/tomcat/PeriodicEventListener

    前天还正常的程序,今天忽然无法启动了,MyEclipse的Console提醒我如下错误: 严重: Error deploying web application directory rttsbizja ...

  6. 【ACM】杭电ACM题一直WA求高手看看代码

    数据测试了好几个都没问题,可以就是WA不让过,检测了2个小时还是没发现有什么问题T_T!!求高手看看代码,小弟在此谢谢各位哦! #include <stdio.h> #include &l ...

  7. 微信小程序 - 调用腾讯地图插件

    1. 登录公众号平台 https://mp.weixin.qq.com/ 2. 设置->第三方服务->添加插件->输入插件名称->申请 3. 项目中使用 3.1 app.jso ...

  8. php之快速入门学习-13(PHP 循环 - While 循环)

    PHP 循环 - While 循环 循环执行代码块指定的次数,或者当指定的条件为真时循环执行代码块. PHP 循环 在您编写代码时,您经常需要让相同的代码块一次又一次地重复运行.我们可以在代码中使用循 ...

  9. Excel还是那些事

        文章来源:刘俊涛的博客 欢迎关注,有问题一起学习欢迎留言.评论

  10. ubuntu中设置xampp开机启动

    sudo ln -s /opt/lampp/lampp /etc/init.d/lampp sudo update-rc.d -f lampp defaults