c 深度剖析 2

1 while 等循环语句

1 break 和 continue的去别

2 将短的循环写在外面,长的写在里面;

3 循环嵌套尽量短

2 void

void *p,为空指针类型,可以指向任何的类型

若函数不接受参数,应写明 void,

3 return





1

2

3

4

5

6

7

8

9

10

11

12

13

14

#include <stdio.h>

int
*func(void)

{

int
a[2]={1,2};

return
a;

}

void 
main()

{

int
*b;

b=func();

printf("%d \n",b[2]);

}





1

main.c|6|warning: function returns address of local variable [enabled by default]|

return 不可访问栈内存中的指针,因为函数运行完后,内存自动销毁。

4 const

const 修饰的是 只读变量,而不是常量,不能用作数组的维数,不能用在case 后

const修饰的变量不允许这里修改不代表不允许别处修改,





1

2

3

4

5

6

7

8

9

10

11

#include <stdio.h>

void 
main()

{

int
i = 5;

const
int* p = &i;

//*p = 6; 不可以 *p为只读类型

i = 7;

printf("i=%d \n",i);

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

}

5 volatile

被volatile  修饰的变量,不会被编译器优化,即每次用到的时候都会从原地址取值。

volatile可理解为“编译器警告指示字”

volatile用于告诉编译器必须每次去内存中取变量值

volatile主要修饰可能被多个线程访问的变量

volatile也可以修饰可能被未知因数更改的变量

const和volatile放在一起的意义在于:

(1)本程序段中不能对a作修改,任何修改都是非法的,或者至少是粗心,编译器应该报错,防止这种粗心;
(2)另一个程序段则完全有可能修改,因此编译器最好不要做太激进的优化。

“const”含义是“请做为常量使用”,而并非“放心吧,那肯定是个常量”。
“volatile”的含义是“请不要做没谱的优化,这个值可能变掉的”,而并非“你可以修改这个值”。
因此,它们本来就不是矛盾的。

const volatile int i=10;这行代码有没有问题?如果没有,那 i 到底是什么 属性?

回答一:没有问题,例如只读的状态寄存器。它是volatile,因为它可能被意想不到地改变;它是const,因为程序不应该试图去修改它。volatile和const并不矛盾,只是控制的范围不一样,一个在程序本身之外,另一个是程序本身。

回答二:没问题,const和volatile这两个类型限定符不矛盾。const表示(运行时)常量语义:被const修饰的对象在所在的作用域无法进行修改操作,编译器对于试图直接修改const对象的表达式会产生编译错误。volatile表示“易变的”,即在运行期对象可能在当前程序上下文的控制流以外被修改(例如多线程中被其它线程修改;对象所在的存储器可能被多个硬件设备随机修改等情况):被volatile修饰的对象,编译器不会对这个对象的操作进行优化。一个对象可以同时被const和volatile修饰,表明这个对象体现常量语义,但同时可能被当前对象所在程序上下文意外的情况修改。另外,LS错误,const可以修饰左值,修饰的对象本身也可以作为左值(例如数组)。

6. struct





1

2

3

4

5

6

7

8

#include <stdio.h>

void 
main()

{

struct
aa{}sa;

printf("%d ",sizeof(struct
aa));

printf("%d ",sizeof(sa));

}

书上说 Vc6.0中 空结构体 大小为1 ,但是GCC中空结构体大小为0;

7柔性数组





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

#include <stdio.h>

#include <stdlib.h>

void 
main()

{

struct
aa

{

    int
i;

    int
a[];

}sa,*sb;

sb=malloc(sizeof(sa)+100*sizeof(int));

sb->a[0]=1;

sb->a[2]=3;

printf("%d \n",sizeof(sa));

printf("%d \n",sb->a[2]);

free(sb);

}

1.结构中最后一个元素允许为柔性数组,a[]为柔性数组,之前必须至少有一个其他成员,

sb=malloc(sizeof(sa)+100*sizeof(int));给数组分配内存

?

8 enum





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

#include <stdio.h>

#include <stdlib.h>

void 
main()

{

enum
ea

{

A=1,

B=2,

C=3,

}eea;

eea=A;

printf("%d \n",eea);

printf("%d \n",sizeof(eea));

printf("%d \n",sizeof(enum
ea));

}

来自为知笔记(Wiz)

c 深度剖析 2,布布扣,bubuko.com

时间: 2024-08-06 03:42:05

c 深度剖析 2的相关文章

[ 1011] &lt;&lt;C语言深度剖析&gt;&gt; 测试 TEST

/******************************** **  wzsts<C语言深度剖析>2016 ** **                    ** **     fun1~fun6代表6章节内容 ** **fun10~fun19代表fun1所调用函数 ** **                    ** **     世界因规则而美好     ** ** #if(1)可运行,#if(0)不运行. ** ** Data  Author   PC       ** **16

横瓜先生深度剖析QQ空间前端后端技术AJAX与FORM等等

[皇帝]北京-横瓜-7年(601069289)  22:06:34 [元帅]横瓜-PHP教父(601069289)  21:35:29 这里是QQ空间的图片上传方法 是FLASH 我草 [元帅]横瓜-PHP教父(601069289)  21:36:31 竟然不是JS QQ空间用FLASH 图片上传方法 [元帅]横瓜-PHP教父(601069289)  21:37:35 至此,整个QQ空间的技术,已经全部被我破解 @IT柏拉图 [元帅]IT柏拉图(2500875)  21:38:11 你真是天才,

【源码】StringBuilder和StringBuffer源码深度剖析

//------------------------------------------------------------------------ 写篇博客不容易,请尊重作者劳动成果.转载请注明出处:http://blog.csdn.net/chdjj //------------------------------------------------------------------------ 我觉得要通过源码研究一个类,应该先从整体上了解这个类,比如说这个类的继承体系,有哪些超类,继承

深度剖析WordPress主题结构(转)

利用强大的技术,可以把基于wordpress的网站做成各种各样的形式,这除了要求wordpress主题开发人员精通html,PHP,JS,CSS等技术,还需要开发者掌握WordPress主题的框架. Gevin今天结合The anatomy of a WordPress theme这篇文章,和大家一起剖析WordPress主题的结构.原文作者用图文形式,分别从网站外观.页面组成和后台文件三个方面,形象的向大家展示了WordPress的架构,下面Gevin和大家一起分析WordPress是如何架构

DDOS学习笔记(《破坏之王-DDOS攻击与防范深度剖析》)

最近花了点时间把<破坏之王-DDOS攻击与防范深度剖析>看了一遍,坦白来说,这本书比较浅显,可以说是入门书,当然对于我这种对DDOS一知半解的人来说,也是一本不错的书,起码我学到了一些东西. DDOS是分布式拒绝服务(Distributed Denial of Service, DDOS)的简写,从名字可以看出,其攻击是分布式的,即多台(可能上万台,甚至更多)电脑同时对目标进行攻击,攻击的目的是让目标无法提供服务.从根本上来说,让目标无法提供服务,办法有很多,比如侵入目标服务器,删除关键服务或

深度剖析消息反射机制

深度剖析消息反射机制作者:hustli    摘要:在前面我们分析了控件通知消息WM_NOTIFY,和WM_NOTIFY紧密联系的还有一个MFC新特性:消息反射.本文中,我想就这个问题作一个全面的论述,如果有错误,还望各路大虾批评指正.    什么是消息反射?    在windows里面,子控件经常向父控件发送消息,例如很多子控件要绘制自己的背景,就可能向父窗口发送消息WM_CTLCOLOR.对于从子控件发来的消息,父控件有可能在处理之前,把消息返还给子控件处理,这样消息看起来就想是从父窗口反射

《AngularJS深度剖析与最佳实践》简介

由于年末将至,前阵子一直忙于工作的事务,不得已暂停了微信订阅号的更新,我将会在后续的时间里尽快的继续为大家推送更多的博文.毕竟一个人的力量微薄,精力有限,希望大家能理解,仍然能一如既往的关注和支持shuang_lang_shuo[破狼]微信号,同时也欢迎大家的高质量文章的投稿. 在2015年一年时间中,我.雪狼大叔.彭洪伟一起共同编写了<AngularJS深度剖析与最佳实践>这本前端Angular.js框架的进阶书籍.在写作期间也得到很多人的支持,特别是在Angularjs中文社区群中的各位群

深度剖析「营销QQ辅助软件」的6大自动营销功能

大家都知道,营销QQ所传播的营销思维就是"大数据管理客户,营销QQ本身具有10万好友的容量,每天可加1000个好友3000个免费消息".把它可以运用到其他个个行业和各大营销类公司,发现这个营销工具真是百搭,放在哪里都好使.基于这个营销工具,我公司总结开发出了 "针对营销QQ全自动化的营销QQ辅助软件":专注的把软件做到极致,全然自动化,用口碑营销达到快速传播的目的. 针对营销QQ全自动化的6个营销功能 首先概括一下营销QQ辅助软件在工作应该包括哪些功能.每个公司根据

Struts(一)struts2.2概述与MVC模式深度剖析

struts2.2概述与MVC模式深度剖析 1.Struts2是由webwork与struts一起组成的.struts1与struts2完全不一样.(处理前段到服务器端的交互,也就是web端) 2.通过基于请求响应( Request-Response)模式的应用Framework, 基本上有如下几个表现逻辑结构组成.– 控制器(Controller) ——控制整个Framework中各个组件的协调工作.– 业务逻辑层(Business Logic) ——对Framework本身来说, 这里仅仅只

Java记录 -25- String类深度剖析

Java中String类深度剖析 1.Java源码中String类的定义: public final class String extends Object implements Serializable, Comparable<String>, CharSequence 2.String 类代表字符串.Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现. 3.字符串是常量:它们的值在创建之后不能更改.字符串缓冲区支持可变的字符串.因为 String