c语言编写经验逐步积累4

寥寥数笔,记录我的C语言盲点笔记,只为曾经经历过,亦有误,可交流。

1.逻辑表达式的使用

取值 = 表达式 ? 表达式1:表达式2;

比如x = y > z ? y:z

2."+,-"等逻辑运算符优先级大于移位,移位大于逻辑运算

3.

sizeof在编译时由编译器完成,对其传入的参数不做运算处理。

sizeof(i++);返回4;不会对实际的i进行操作

sizeof和strlen的区别是,后者是运算时执行。

返回遇到非NULL时的字符个数。

sizeof处理数组名时会统计分配的内存数,如a[12] = {};则sizeof(a) = 12;

如a [] = "aaa",则编译器是分配4内存空间存放数据,sizeof(a)= 4;

4.强制类型转换先于+,-,故指针类型变化后,自加操作会不同;

5.invalid combination of type specifiers

无效的类型进行组合。引起的原因主要是头文件多种数据类型define和typedef引起了错误。


typedef是一个类型的重定义 不是宏的值的重定义 只能用于类型的替换

,主要在编译阶段,需要带有分号

define是宏定义,主要在预处理阶段,不太适合做类型转换,结尾分号会被带入宏替换

比如先定义

#define Uint8 unsigned char

typedef xdc_Uint8 Uint8;这就进行了宏替换为:

typedef xdc_unsigned char Uint8;从而导致了类型结合无效的现象。故define宏是预处理的替换,而typedef是做到数据类型的真正转换与定义。

宏最好不要进行typedef的转换!!!。

数据类型在多处定义时,注意不要出现上述情况

6.printf输出%号,需要使用printf("%%\n");来输出

7.逻辑或与运算或要切记:
|和||,以及&和&&的使用。

8.取非!和~的运算优先级》 + -;

9 strcpy是将源地址开始到\0结束的字节数复制到目的地址。

strlen统计的从源地址到遇到\0前的字节数,不算如\0

10.某一位置1 A |= (1 << 5);

某一位置0 A &=  ~(1 << 5);

某一位取反 A ^= (1 << 5); 与1异或取反。

11. union进行赋值时需要使用a.b操作

12、0x%08x,输出16进制数要达到8位,不然在前面补0

14.栈帧包括另一帧需要的函数参数,返回的pc地址以及当前帧的ebp.

15. 结构体对齐

struct test

{

char x1;

short x2;

float x3;

char x4;

};

由于编译器默认情况下会对这个struct作自然边界(有人说“自然对界”我觉得边界更顺口)对齐,结 构的第一个成员x1,其偏移地址为0,占据了第1个字节。第二个成员x2为short类型,其起始地址必须2字节对界,因此,编译器在x2和x1之间填充 了一个空字节。结构的第三个成员x3和第四个成员x4恰好落在其自然边界地址上,在它们前面不需要额外的填充字节。在test结构中,成员x3要求4字节 对界,是该结构所有成员中要求的最大边界单元,因而test结构的自然对界条件为4字节,编译器在成员x4后面填充了3个空字节。整个结构所占据空间为 12字节。

16.

memset(),是将n个字节都设置为传入的一个字节如memset(a, 0, 100);

memcpy(dst, src, n);将src开始的n个字节copy到目的上去。

17.多进程引用的动态链接库中的全局变量问题

由于不同进程间是独立的,有自己的text和data,而全局位于数据段,故不会存在竞争的现象。

18.struct的一种结构体数组申明与定义的方法。

static struct {   char *name;
    int offset;  } _reg_list[] = {};

a

c语言编写经验逐步积累4

时间: 2024-08-07 21:20:51

c语言编写经验逐步积累4的相关文章

c语言编写经验逐步积累3

寥寥数笔,记录我的C语言盲点笔记,只为曾经经历过,亦有误,可交流. 1.typedef来定义一个函数指针类型的方法,定义一个新的函数指针类型. :建立一个类型别名的方法很简单,在传统的变量声明表达式里用类型名替代变量名,然后把关键字typedef加在该语句的开头". typedef int (*PFUN)(): 定义PFUN这个函数指针类型,由编译器自动来完成,比如PFUN pfun;定义了一个函数指针,类似于抽象出一种新的变量类型. typedef unsigned short (*pTask

shell简介 linux由什么语言编写

1.shell简介 Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释和执行用户输入的命令:作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支.它虽然不是Linux系统核心的一部分,但它调用了系统核心的大部分功能来执行程序.建立文件并以并行的方式协调各个程序的运行.因此,对于用户来说,shell是最重要的实用程序,深入了解和熟练掌握shell的特性极其

《C语言编写 学生成绩管理系统》

/* (程序头部凝视開始)* 程序的版权和版本号声明部分* Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved.* 文件名: 学生成绩管理系统 * 作 者: 刘江波 * 完毕日期: 2012 年 6 月 23 日* 版 本 号: v.623 * 对任务及求解方法的描写叙述部分 * 程序头部的凝视结束 */ #include "stdio.h" #include"string" /*定义学生结构体*/ struc

【原创】用第三方语言编写PostgreSQL 存储函数

在PostgreSQL里,所有的存储函数需求都可以用PLPGSQL来实现.同时也支持用第三方语言来编写,这个就得看自己哪个方面熟练了.不过要注意的一点是 PLPGSQL的效率怎么着都比其他第三方语言来的高效.比如,简单的插入表的存储函数: CREATE OR REPLACE FUNCTION ytt.insert_plpgsql(f_num integer) RETURNS void LANGUAGE plpgsql AS $ytt$ declare i int := 0; v_rank int

基于Perfect用Swift语言编写Slack聊天机器人

基于Perfect用Swift语言编写Slack聊天机器人 本项目是专门为Slack聊天机器人定制的模板服务器. 完整的源代码下载在Github https://github.com/PerfectServers/SlackBot 在本项目模板中,一个聊天机器人可以加入授权频道,读取频道内所有用户发送的"曲奇"并记录在案,而且可以直接答复用户的有关曲奇饼干的问题. 预备知识 在您决定编译.测试或者部署您自己的基于Perfect软件框架体系的聊天机器人之前,以下基础知识??不可或缺??:

ubuntu 下使用CGI c语言 编写helloworld

从根本上说,CGI 就是HTML表单与服务端脚本之间的接口. 自己可以百度了一些cgi知识:给出链接报错.那就自己Google哈 也因为工作需要,所以来学习了下. 一.安装及配置apache服务器 安装apache2服务器 #sudo apt-get install apache2 配置apache2服务器 配置文件位于 /etc/apache2/sites-enabled/000-default 用vi打开配置文件: #sudo vi /etc/apache2/sites-enabled/00

Oracle存储过程的编写经验与优化措施

1.开发人员如果用到其他库的Table或View,务必在当前库中建立View来实现跨库操作,最好不要直接使用"databsevv.dbo.table_name",因为sp_depends不能显示出该SP所使用的跨库table或view,不方便校验. 2.开发人员在提交SP前,必须已经使用set showplan on分析过查询计划,做过自身的查询优化检查. 3.高程序运行效率,优化应用程序,在SP编写过程中应该注意以下几点: a) SQL的使用规范: i. 尽量避免大事务操作,慎用ho

运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程,把获取的信息存入数据库

运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程 有关前两篇的链接: 运用Python语言编写获取Linux基本系统信息(一):获得Linux版本.内核.当前时间 运用Python语言编写获取Linux基本系统信息(二):文件系统使用情况获取 一.实验环境: Python2.7.10.pycharm.VM虚拟机.CentOS6.3.mysql 二.MySQLdb模块: MySQLdb模式是Python中专门连接MySQL数据库的模块,另外Python开发环境的搭

通过WebSocket实现实时通讯C#语言编写服务端

无意中发现js有webSocket对象于是百度了一下客户端代码与服务端代码没有现成的 有的就有一些简单了连接例子有的还不好使 于是就自己整理了一下 c#编写的服务端代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Net.Sockets; using System.Text.RegularExpression