C语言-拾遗(1) 关键字 && 运算符

关键字

extern static const typedef define sizeof union

extern表示的是“已经存在一个变量,但是不在当前的编译单元内,需要在其他编译单元中寻找。”

extern尽量写到.h文件中Extern语句频繁的用于在多个文件之间的跨范围数据传递

static会定义一个变量

1)修饰局部变量便存放在静态数据区

2)修饰全局变量(使得该变量只能本源文件可见)

对于一个全局变量,它既可以在本源文件中被访问到,也可以在同一个工程的其它源文件中被访问(只需用extern进行声明即可)。

3)修饰函数   与全局常量一样,改变作用域

const 定义为只读变量

const在‘*‘后面,表示是来修饰指针变量本身,因此在声明时必须进行初始化,并且在后面不能再指向其它的变量.

(1)在C语言中用const去修饰一个变量,表示这个变量是只读的,不可通过显式的调用a去修改a的值,并且此时a是一个只读变量,不能等同于常量;

C++ 中就将其视为常量.

(2)要注意const在声明变量时所处的位置,位置不同,在意义上可能会有很大的不同。

如果const在‘*‘左边,则表示指针指向的变量的值不可变;

如果const在‘*‘右边,则表示指针的值是不可变的;

typedef是用来声明类型别名的,在实际编写代码过程使用typedef往往是为了增加代码的可读性。它可以为一串很长的类型名起一个别名,那么使用这个别名可以达到与原类型名相同的效果。

#define INTPTR1 int*typedef int* INTPTR2;

INTPTR1 p1,p2;INTPTR2 p3,p4;

sizeof 是个运算符,对长度大小进行计算

1)如果是表达式的话,括号可以省略,但是对于类型,括号不能省;

2)sizeof求算的是所占的空间,如果作用于表达式,这个表达式是不进行求值的,只根据类型转换求得表达式的类型,而表达式的类型在编译时就可以确定。

在有二元运算符的表达式中,必须加括号,否则sizeof只会对第一个操作数进行空间计算

union 联合体

1)联合体是一个结构;

2)它的所有成员相对于基地址的偏移量都为0;

3)此结构空间要大到足够容纳最"宽"的成员;

4)其对齐方式要适合其中所有的成员;

做不同类型之间的转换 避免了强制类型转换

IP地址,之前就用的是union,取地址方便

union U
{
    char s[9];
    int n;
    double d;
};

s占9字节,n占4字节,d占8字节,因此其至少需9字节的空间。然而其实际大小并不是9,用运算符sizeof测试其大小为16.这是因为这里存在字节对齐的问题,9既不能被4整除,也不能被8整除。因此补充字节到16,这样就符合所有成员的自身对齐了。从这里可以看出联合体所占的空间不仅取决于最宽成员,还跟所有成员有关系,即其大小必须满足两个条件:1)大小足够容纳最宽的成员;2)大小能被其包含的所有基本数据类型(这里的s是1
)大小所整除。

运算符

一共有十五个优先级: 

1   ()  []  .  ->

2   !  ~   -(负号) ++  --   &(取变量地址)*   (type)(强制类型)    sizeof 

3   * / %

4   + - 

5   >> <<  

6   > >= < <= 

7   == !=   

8   &  

9   ^   

10  |   

11  &&

12  ||

13  ?:

14   =  +=  -=  *=  /=   %=  |=   ^=   &=   >>=   <<=

15  ,

结合性:2   13  14  是从右至左   其他都是  从左至右
时间: 2024-08-29 07:13:29

C语言-拾遗(1) 关键字 && 运算符的相关文章

C语言的那些关键字

C语言有一堆关键字,一共n个,就在下面: 1.类型关键字 系统内置类型:long short int char float double void long:32位整数,默认为有符号,下同 short:16位整数 int:根据机器而定是32位还是16位整数,现在的一般都是32(常用) char:8位字符(常用) float:32位小数(单精度) double:64位小数(双精度)(常用) void:无(变量只能用于void*,函数返回类型可以用void)(常用) 自定义类型:struct uni

3、C语言之数据类型、运算符与表达式

C语言之数据类型.运算符与表达式 1.C的数据类型 数据类型决定: (1)数据占内存的字节数 (2)数据取值范围 (3)可以进行的操作 2.常量与变量 常量和符号常量 在程序运行过程中,其值不能被改变的量称为常量 常量区分为不同类型: 整型 100 ,125,-1000 实型:3.14, 0.23 字符型: 'a', 'b' 字符串型:"a", "adfdg", "1233" 用某种符号来代表某个常量,称这个符号为符号常量 #define PRI

【转载】理解C语言中的关键字extern

原文:理解C语言中的关键字extern 最近写了一段C程序,编译时出现变量重复定义的错误,自己查看没发现错误.使用Google发现,自己对extern理解不透彻,我搜到了这篇文章,写得不错.我拙劣的翻译了一下.(原文:http://www.geeksforgeeks.org/understanding-extern-keyword-in-c/)   我确定这篇文章对c语言的初学者会有很大的帮助,因为这将使他们更好更熟练的使用c语言.所以就让我先来说说extern关键字在变量和函数上的应用.最基本

Swift语言指南(九)--基本运算符

运算符(operator)是用来检查,改变或合并值的一种特殊符号或短语.例如,加号运算符让两个数字相加(如:let i = 1 + 2),还有些更复杂的运算符,如逻辑与运算符(&&)(如:if enteredDoorCode && passedRetinaScan)和自增运算符(++i)(将 i 的值加 1 的便捷写法). Swift 支持标准C语言的大多数运算符,并且改进了一些特性以规避常见的代码错误.赋值运算符(=)是没有返回值的,这样是为了避免在使用等于运算符(==)

嵌入式linux C++语言(六)——运算符重载

嵌入式linux C++语言(六)--运算符重载 运算符重载的本质是函数重载. 一.重载基础 1.运算符重载的语法 返值类型 operator 运算符名称(形参表列){    重载实体;} 2.友元重载 可以将运算符重载函数声明位友元函数 #include <iostream> using namespace std; class Complex { public:     Complex(float x=0, float y=0)         :_x(x),_y(y){}     voi

黑马程序员——c语言学习心得——位运算符

黑马程序员——c语言学习心得——位运算符 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 位运算符C语言提供了六种位运算符: & 按位与 | 按位或 ^ 按位异或 ~ 取反 << 左移 >> 右移 1. 按位与运算 按位与运算符"&"是双目运算符.其功能是参与运算的两数各对应的二进位相与.只有对应的两个二进位均为1时,结果位才为1 ,否则为0.参与运算的数以补码方式出现. 例如:9&

黑马程序员——c语言学习心得——位运算符a

黑马程序员——c语言学习心得——位运算符 -------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- c语言中经常需要通过函数传递二维数组,有三种方法可以实现,如下: 方法一, 形参给出第二维的长度. 例如: #include <stdio.h>void func(int n, char  str[ ][5] ){int i;for(i = 0; i < n; i++)  printf("/nstr[%d] = %s/n"

C语言32个关键字总结

C语言32个关键字  第一类:数据类型关键字 A基本数据类型(5个) void 声明函数无返回值或无参数,声明无类型指针,显式丢弃运算结果. char 字符型类型数据,属于整型数据的一种.int 整型数据,通常为编译器指定的机器字长.float 单精度浮点型数据,属于浮点数据的一种,小数点后保存6位.double 双精度浮点型数据,属于浮点数据的一种,比float保存的精度高,小数点后保存15/16位. B类型修饰关键字(4个) short 修饰int,短整型数据,可省略被修饰的int. lon

C语言的inline关键字

一直以来我就认为inline关键字是C++中的.今天我看到一篇讲关于C语言的inline关键字的.呵呵... 原来是我弄错了.看来以后定义一些宏命令完全可以用这样的一些inline函数来代替了.以下是我从网上搜集来的知识点(来 源:http://superding.spaces.live.com/Blog/cns!89E842A8485366C7!1137.entry) 本文介绍了GCC和C99标准中inline使用上的不同之处.inline属性在使用的时候,要注意以下两点: inline关键字