c语言变态语法一

这篇博客整理了一些C语言中不太常见或者容易忽视的语法点,包括一些变态语法。作者通过代码注释的方式在示例代码中呈现这些知识点,方便读者直接运行查看效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


         比较杂乱的记录的一些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;
}


内容概要:论文提出了种基于空间调制的能量高效分子通信方案(SM-MC),将传输符号分为空间符号和浓度符号。空间符号通过激活单个发射纳米机器人的索引来传输信息,浓度符号则采用传统的浓度移位键控(CSK)调制。相比现有的MIMO分子通信方案,SM-MC避免了链路间干扰,降低了检测复杂度并提高了性能。论文分析了SM-MC及其特例SSK-MC的符号错误率(SER),并通过仿真验证了其性能优于传统的MIMO-MC和SISO-MC方案。此外,论文还探讨了分子通信领域的挑战、优势及相关研究工作,强调了空间维度作为新的信息自由度的重要性,并提出了未来的研究方向和技术挑战。 适合人群:具备定通信理论基础,特别是对纳米通信和分子通信感兴趣的科研人员、研究生和工程师。 使用场景及目标:①理解分子通信中空间调制的工作原理及其优势;②掌握SM-MC系统的具体实现细节,包括发射、接收、检测算法及性能分析;③对比不同分子通信方案(如MIMO-MC、SISO-MC、SSK-MC)的性能差异;④探索分子通信在纳米网络中的应用前景。 其他说明:论文不仅提供了详细的理论分析和仿真验证,还给出了具体的代码实现,帮助读者更好地理解和复现实验结果。此外,论文还讨论了分子通信领域的标准化进展,以及未来可能的研究方向,如混合调制方案、自适应调制技术和纳米机器协作协议等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值