c语言变态语法一
来源:互联网 发布:excel每隔n列取数据 编辑:程序博客网 时间:2024/05/01 22:07
比较杂乱的记录的一些c语言的变态语法,或者说一些比较少见的,又或者说是一些比较容易忽略的语法,形式整理的不怎么好。
我将这些需要注意的问题通过代码注释的形式写在了代码之中,粘贴下来便可以调试运行查看结果。
#include <stdio.h>#include <stdlib.h>#include <string.h>void memcpy_w(char *dest,char *source,int k){ while(--k > 0) *dest++ = *source++;}double Func(); main(){/* 生僻语法一: 整型常量开始如果为0,将被解析为8进制的格式,或者 16进制的格式*/ int a,b,c;//scanf("%d %d",&a,&b);/* 如果规定了输入格式,那么后面的00215将为215, 下面的直接定义的结果为141,0215将为8进制的数*/ a= 0215; //8进制 b=215; //10进制 c= 0x215; //16进制//a=a/ *b; printf("a: %d b: %d c: %d\n",a,b,c);/* 二:单引号和双引号不同,单引号引起的一个字符代表一 个整数,如'a'代表0141(8进制),或者97(10进制), 双引号引起的字符串代表的是指向无名数组起始字符的指 针,数组被双引号之间的字符及一个额外的二进制值为0 的字符'\0'初始化,如下面例子输入的结果相同*/ printf("Hello\n"); char hello[]={'H','e','l','l','o','\n',0}; printf(hello); /* 编译器能够在+连续的情况下报错 int x=2; int y=1; int z=x+++ ++y; printf("z: %d\n",z);*/ /* 易混淆情况如下 如果声明 float *g(),(*h)(); *g() 与 (*h)()是浮点表达式,因为()结合性高于*, *g() 也就是*(g()),g是一个函数,该函数的返回值 为指向浮点数的指针,h是一个函数指针,返回值为 浮点类型 */ /* 变态语法三: 可以将函数的声明甚至可以写成如下的样子: (*(void(*)())0)(); 表示硬件调用首地址为0位置的子程序 */// int d=0;// (*(void(*)())0)();//printf("%d",d); int d=2; switch(d) { case 1: printf("1\n"); break; case 2: printf("2\n"); break; //不用加大括号 case 3: printf("3\n"); break; }/* 易混淆: 在下面的程序中,可能会出现死循环的情况,如果 编译器按照内存地址递减的方式给变量分配内存, 那么内存中数组a之后的一个字实际上是分配给了 整型变量i,即本来不存的a[10]的值实际上是给了i, 这样就陷入了死循环。不要惊讶就好!!! 但我用codeblock编译,没有出现死循环在使用vc++6.0 运行下面的程序时,出现了死循环,通过调试发现,i回到了0,即出现了上面所说的情况最好是能够亲自试验一下*/ /* int i,e[10]; for(i=0;i<=10;i++) e[i]=0; printf("over\n"); */ char *source = "hello World\n"; //此处下面需要分配 //char *dest = (char *)malloc(sizeof(1)); //char *dest = (char *)malloc(sizeof(15)); char dest[1]; //只要给其实地址分配了内存,后面的就都是连续的存储空间, memcpy_w(dest,source,14); printf("dest: %s",dest); int bignuma=999999999; int bignumb=bignuma; int num=bignuma + bignumb; printf("num : %d\n",num); /* 易错难找的bug: 数据上界溢出,导致错误的结果,这个是比较难找到的错误!!! 当然可能会有数据下界溢出的情况 */ if(bignuma+bignumb > 10000000000 ) printf("success\n");#ifndef INT_MAX#define INT_MAX 999999999#endif printf("INT_MAX: %d\n",INT_MAX);// if(unsigned(bignuma) + unsigned(bignumb) > )// printf("%d \n",bignuma);//testFun();//testFun2(); Func();}double Func(){ double t=10.000; return t;}
- c语言变态语法一
- c语言变态语法二
- c语言语法(一)
- c语言笔记(一)基本语法
- C语言学习笔记--基础语法一
- c语言基础(一)语法篇
- 6个变态的C语言程序
- 6个变态的C语言
- C、C++、Java三种语言语法对比(一)
- 【Java语法与C语言的区别】一
- 黑马程序员-C语言学习日记(一)基础语法
- C语言学习笔记(一) -基本语法 Basic Grammar
- C语言基本语法
- C语言语法
- C语言声明语法
- C语言语法
- 【C语言】语法--extern
- C语言语法总结
- Qt中显示OpenCV的IplImage
- DC3 DC4 notepad
- robotframework 基于接口测试的框架探索
- c语言进度显示怎么编写
- 数组和指针
- c语言变态语法一
- mfc CDialog使用方法
- C#中的变量作用域
- 使用OpenCV和C++实现的分水岭算法(Watershed)
- 渐近记号
- iPhone 聊天气泡
- Web1.0、Web2.0、Web3.0对比分析
- 比较避孕套、安全期、避孕药、体外排精的避孕方法效果
- Lua 5.2 参考手册(一)