vs及c语言总结,推荐文档_第1页
vs及c语言总结,推荐文档_第2页
vs及c语言总结,推荐文档_第3页
vs及c语言总结,推荐文档_第4页
vs及c语言总结,推荐文档_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一关于如何新建 C/C+? 首先打开新建一一项目一一win32 win32控制台应用程序一一在名称处输入项目的名字 输好点击确定一一在新页面中点击“空程序”之后再点击“完成”,然后在解决资源管理器 处找到项目右键单击添加新建项选择C+文件就可,如果是c还要在文件名处 加“ .c” 二. 1LINK : fatal error LNK1123:转换到 COFF期间失败:文件无效或损坏,编译出现这种 那个情况解决办法为:打开项目属性清单工具输入输出输出清单 文件后面的是改为否就可以了。 终极解决方案: VS2010在经历一些更新后, 建立 Win32 Console Project时会出“ err

2、oLNK1123”错误,解 决方案为将项目|项目属性|配置属性|清单工具|输入和输出|嵌入清单 是”改为否”即可,但 是没新建一个项目都要这样设置一次。 在建立VS2010 Win32 Project项目时,按照上面解决方案依然发生了“errorLNK1123错误, 经过上网查资料,解决方案为: 第一步:与上相同。 第二步:将项目|项目属性|配置属性|连接器|清单文件 嵌入清单 是”改为否”。 第三步:一般计算机经过上两步设置就能解决问题了,但是如果还有问题,那就按一下方法 解决: 计算机是否为64bit操作系统,如是,继续2。 查 找 是 否 有 两 个 cvtres.exe 。 一 个 是

3、 C:Program Files(x86)Microsoft Visual Studio 10.0vcbincvtres.exe, 另一个是 C:Wi ndowsMicrosoft.NETFrameworkv 4O30319cvtres.exe 。右键属性|详细信息 查看两者版本号,删除/重命名较旧的版本,或 void main() char s580= I must wait for the sunrise,; char * s6= and I must think of the new life;/ 关于字符串直接给字符指针 strcat1(s5,s6); printf( %sn ,s5)

4、; 经验:在搞不清楚其哪个出现错误的时候可以设置断点的方式进行调试看下面的执行结果,就可以发现其 错误了。 2 冒泡法(由小变大) : #include stdio.h void main() int a15=1,9,0,21,3,16,4,5,12,7,6,20,2,8,15; int i,j,t; for (i=0;i=14;i+) printf( %dn ,ai); for (i=0;i=13;i+) for (j=0;j=aj+1) t=aj; aj=aj+1; aj+1=t; for (i=0;i=14;i+) printf( %dn ,ai); 3 指针和数组 #include s

5、tdio.h void func( int *p) int i; for (i=0;i=9;i+) printf( %dn ,*(p+i); void main() int a10=0,1,2,3,4,5,6,7,8,9; fun c(a); #include stdio.h / 由?| 大?到 i?小?进?行D排?列 CD ?e void main() int a5=5,6,2,9,0; int i,t,j; for (i=0;i=4;i+) printf( %dn ,ai);/ 总 a体 ?思?路 ?。是 o?: e从 ?最 a后?一 ?个? 往a前??进?行比 d较?, e到i ?a1时

6、o?e结C束o? for (i=0;i=i+1;j-)/ 到 1最 a后?是0?到 1 ?i+1 处?| 结C束o?的 1? e? 然? if (ajaj-1) t=aj; aj=aj-1; aj-1=t; for (i=0;i=4;i+) printf(%dn ,ai); 4有有关const用法 #inelude stdio.h void main() int const i=1; const int *p= *p=5; /表达式必须是可修改的左值。 printf( %x,p); con st是一个C语言的关键字,它限定一个变量不允许被改变。使用con st在一定程度上 const所起 可以

7、提高程序的安全性和可靠性,另外,在观看别人代码的时候,清晰理解 的作用,对理解对方的程序也有一些帮助。 我们来分情况看语法上它该如何被使用。 1、函数体内修饰局部变量。 例: void func() const int a=0; 首先,我们先把const这个单词忽略不看,那么a是一个int类型的局部自动变量,我 们给它赋予初始值0。然后再看const. con st作为一个类型限定词,和int有相同的地位。 const int a; int const a; 是等价的。于是此处我们一定要清晰的明白,const修饰的对象是谁,是a,和int没有 关系。con st要求他所修饰的对象为常量,不可被

8、改变,不可被赋值,不可作为左值 (l-value)。 这样的写法也是错误的。 const int a; a=0; 这是一个很常见的使用方式: const double pi=3.14; 在程序的后面如果企图对pi再次赋值或者修改就会出错。 然后看一个稍微复杂的例子。 const int* p; 还是先去掉const修饰符号。 注意,下面两个是等价的。 in t* p; int *p; 其实我们想要说的是,*p是int类型。那么显然,p就是指向int的指针。 同理 const int* p; 其实等价于 const in t (*p); int con st (*p); 即,*p是常量。也就是说

9、,p指向的数据是常量。 于是 p+=8; / 合法 *p=3; /非法,p指向的数据是常量。 那么如何声明一个自身是常量指针呢?方法是让const尽可能的靠近p; int* const p; con st右面只有p,显然,它修饰的是p,说明p不可被更改。然后把con st去掉,可以看 出p是一个指向int形式变量的指针。 于是 p+=8; / 非法 *p=3; / 合法 再看一个更复杂的例子,它是上面二者的综合 const int* const p; 说明p自己是常量,且p指向的变量也是常量。 于是 p+=8; / 非法 *p=3; / 非法 con st还有一个作用就是用于修饰常量静态字符串

10、。 例如: const char* n ame=David; 如果没有con st我们可能会在后面有意无意的写 n ame4=x这样的语句,这样会导致 对只读内存区域的赋值,然后程序会立刻异常终止。有了con st,这个错误就能在程序被 编译的时候就立即检查出来,这就是 con st的好处。让逻辑错误在编译期被发现。 con st还可以用来修饰数组 const char s=David; 与上面有类似的作用。 2、在函数声明时修饰参数 来看实际中的一个例子。 NAME memmove - copy byte str ing LIBRARY Sta ndard C Library (libc,

11、-lc) SYNOPSIS #in clude void * memmove(void *dst, const void *src, size_t len); 这是标准库中的一个函数,用于按字节方式复制字符串(内存)。它的第一个参数, 是将字符串复制到哪里去(dest),是目的地,这段内存区域必须是可写。它的第二个参数, 是要将什么样的字符串复制出去,我们对这段内存区域只做读取,不写。于是,我们站 在这个函数自己的角度来看,src这个指针,它所指向的内存内所存 储的数据在整个函数执行的过程中是不变。于是src所指向的内容是常量。于是就需要 用const修饰。例如,我们这里这样使用它。 cons

12、t char* s=hello; char buf1OO; memmove(buf,s,6); / 这里其实应该用 strcpy 或 memcpy 更好 如果我们反过来写, memmove(s,buf,6); 那么编译器一定会报错。事实是我们经常会把各种函数的参数顺序写反。事实是编译 器在此时帮了我们大忙。如果编译器静悄悄的不报错,(在函数声明处去掉const即可), 那么这个程序在运行的时候一定会崩溃。 这里还要说明的一点是在函数参数声明中const 般用来声明指针而不是变量本身。 例如,上面的size_t len,在函数实现的时候可以完全不用更改len的值,那么是否应该 把len也声明为常

13、量呢?可以,可以这么做。我们来分析这么做有什么优劣。 如果加了 con st,那么对于这个函数的实现者,可以防止他在实现这个函数的时候修改 不需要修改的值(len),这样很好。 但是对于这个函数的使用者, 1。这个修饰符号毫无意义,我们可以传递一个常量整数或者一个非常量整数过去, 反正对方获得的只是我们传递的一个copy。 2。 暴露了实现。我不需要知道你在实现这个函数的时候是否修改过len的值。 所以,const 般只用来修饰指针。 再看一个复杂的例子 int execv(c onst char *path, char *const argv); 着重看后面这个,argv.它代表什么。 如果

14、去掉con st我们可以看出 char * argv; argv是一个数组,它的每个元素都是char *类型的指针。 如果加上con st那么con st修饰的是谁呢?他修饰的是一个数组,argv,意思就是说这 个数组的元素是只读的。 那么数组的元素的是什么类型呢?是char *类型的指针也就是 说指针是常量,而它指向的数据不是。 于是 argv1=NULL;/ 非法 argv00=a: / 合法 3。全局变量。 我们的原则依然是,尽可能少的使用全局变量。我们的第二条规则则是,尽可能多 的使用con st。如果一个全局变量只在本文件中使用,那么用法和前面所说的函数局部 变量没有什么区别。如果它

15、要在多个文件间共享,那么就牵扯到一个存储类型的问题。 有两种方式。 1. 使用 extern 例如 exter n const double pi; const double pi=3.14; 然后其他需要使用pi这个变量的,包含filel.h #include filel.h 或者,自己把那句声明复制一遍就好。 这样做的结果是,整个程序链接完后,所有需要使用pi这个变量的共享一个存储区 域。 2. 使用static,静态外部存储类 static const pi=3.14; 需要使用这个变量的*.c文件中,必须包含这个头文件。 前面的static 一定不能少。否则链接的时候会报告说该变量被多

16、次定义。这样做的结 果是,每个包含了 constant.h的*.c文件,都有一份该变量自己的copy,该变量实际上还 是被定义了多次,占用了多个存储空间,不过在加了static关键字后,解决了文件间重 定义的冲突。坏处是浪费了存储空间,导致链接完后的可执行文件变大。但是通常,这 个,小小几字节的变化,不是问题。好处是,你不用关心这个变量是在哪个文件中被初 始化的。 最后,说说const的作用。 con st的好处,是引入了常量的概念,让我们不要去修改不该修改的内存。直接的作 用就是让更多的逻辑错误在编译期被发现。所以我们要尽可能的多使用const。但是很 多人并不习惯使用它,更有甚者,是在整个

17、程序编写/调试 完后才补const。如果是 给函数的声明补const,尚好。如果是给 全局/局部变量补 const,那么那么,为时已 晚,无非是让代码看起来更漂亮了。 5可以用在 math.h头文件中声明的 pow()函数求,例如: 要求a的b次方,就用pow(a,b)即可。 A符号在C中是位异或操作符,不用于求乘方。 #include stdio.h #include math.h void main() long double total; int x = 2; double y = 5; total = pow(x,y); /* 调 i ?用?pow函 ?数oy*/ printf( %lf ,total); 四有关陌生概念的理解 1)伪码,也就是就是用常规语言或文字符号(即非编程语言写的)代码算法,叫伪代 码只是为了直观的表达出算法,才用伪代码,还有相应的伪代码语言等,这些代码无法 运行,只有通过按照伪代码所表达的算法或操作,编好程序,才能运行.举例,我要表 达c语言中的i+操作,我可以些成i自加1,当然一看就知道i自加1是机器读不懂 的这种用人能看

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论