在此记录一些常见的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. unity forward renderer的 base pass rt设置

    一般他都是用 RenderTexture::SetActive()来设置rt 但是 forward path 的opaque我跟了好久找不到这个setactive 在dorender之前有setupR ...

  2. GoLang中 json、map、struct 之间的相互转化

    1. golang 中 json 转 struct <1. 使用 json.Unmarshal 时,结构体的每一项必须是导出项(import field).也就是说结构体的 key 对应的首字母 ...

  3. 设置网站expires和max-age属性

    转:http://www.zicheng.net/article/982022.htm 在使用百度站长工具测试网站优化建议时,在 设置静态内容缓存时间 栏目里,会提示 类似 FAILED - (未设置 ...

  4. PHPCMS部件

    数据库操作: $member_db = pc_base::load_model('member_model'); $memberinfo = $member_db->get_one(array( ...

  5. C#.NET常见问题(FAQ)-控制台程序如何输出Messagebox

    1 添加如下引用   2 添加引用和Messagebox的代码.   3 测试可行     更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com/aceta ...

  6. CDN具体解释(篇一)

    CDN是一个致力于使内容传输更快.更高效的针对webserver的全局分布式网络.通过CDN来复制使这些内容能够在非常多地方同一时候存在. 比較有名的CDN厂商有AKamari,Amazon Clou ...

  7. CAD打开慢,卡在99%

    问题描述 打开AutoCAD的时候,软件停留在加载99%,点击出现[无法响应],要么等待,要么强行关闭,若平时正常关闭CAD时也异常缓慢. 原因分析 破解版,没有联网就激活了.CAD默认启动需要联网, ...

  8. iOS中重用UITableView单元格时,千万别忘了这个

    不多说,看截图

  9. ORACLE常用监控语句(未完待续)

    --查询日志的切换频率 select  t1.RECID as srecid        ,t2.RECID as erecid        ,t1.FIRST_TIME as stime     ...

  10. mac 终端 使用 solarized 主题设置语法高亮

    mac 终端 使用 solarized 主题设置语法高亮 先来看看 solarized 在 mac 终端上的效果图片 一:先下载 solarized 官网下载:https://github.com/a ...