C语言知识点回顾

1,C99标准是指1999年诞生的C语言标准;C11标准是指2011年诞生的C语言标准。


2,常见的标准类型有:

    int8_t  int16_t  int32_t  int64_t

    uint8_t  uint16_t  uint32_t  uint64_t

    float  double

    Visual C++ 没有严格支持C99,它不支持上面的整型类型,它支持的对应的整型类型是 __int8  __int16  __int32  __int64 。


3,尽量不要使用int。虽然大部分情况下int等同于int32_t,但万一遇到一个奇葩的环境使得int等同于int16_t呢。。。


4,有时候需要把一个指针转换成整型数字,可以用uintptr_t来存储这个指针地址。在32位平台上,uintptr_t等同于uint32_t;在64位平台上,uintptr_t等同于uint64_t。

它的有符号的形式是intptr_t。


5,size_t在编程中非常基础,它是“能够容纳最大的数组索引的整数”。最常见的情况,它是运算符sizeof的返回类型。在32位平台上,size_t等同于uint32_t;在64位平台上,size_t等同于uint64_t。


6,C99允许在for循环中声明内联计数器,所以,不要这样写:

int i;
for (i=0; i<99; ++i)
应该这样写:

for (int i=0; i<99; ++i)


7,现代编译器都支持 #pragma once ,不再需要写成 #ifndef ... #define ... #endif 。


8,C语言允许对自动分配的数组进行静态初始化。所以,不要这样写:

int32_t kkk[32];
memset(kkk, 0, sizeof(kkk));
应该写成:

int32_t kkk[32] = {0};


9,C语言允许对自动分配的结构体进行静态初始化。所以,不要这样写:

struct myStruct
{
    int64_t num1;
    int32_t num2;
};
myStruct kkk;
memset(&kkk, 0, sizeof(kkk));
应该这样写:

struct myStruct
{
    int64_t num1;
    int32_t num2;
};
myStruct kkk = {0};
重要提示:{0}方法不会将“由于内存自动对齐而额外增加的那部分内存”清零。对于 myStruct kkk ,{0}方法只能把前12个字节清零。


10,下面的写法是正确的:

struct myStruct
{
    int64_t num1;
    int32_t num2;
};
myStruct kkk = {0};
myStruct mmm = {num2 = 22};
mmm = kkk;
myStruct nnn = struct myStruct{0}; //编译器自动创建匿名结构体,并将其值填充到目标中

11,C99添加可变长数组(C11可选)。下面的写法是正确的:

uint32_t Num = 60*60;
int32_t Array[Num]; //Num是一个变量,但是语法是正确的,效果与 int32_t Array[3600] 完全一样
我们应该禁止这种写法,因为它是占用栈上的内存,一旦申请过多的内存就会导致程序崩溃。如果你能够保证Num这个变量的取值在可控范围内,不会申请太多的内存,那么可以谨慎的使用这种写法。


12,永远不使用malloc,而应该用calloc,当得到为0的内存时将不会有性能损失。如果你不喜欢函数原型calloc(object count, size per object),可以用#define mycalloc(N) calloc(1, N) 将其封装起来。


//<<<<<<<<<<<<<<<<<<<<<<<<<

以上内容是在【http://geek.csdn.net/news/detail/63135】这篇文章上,总结出来的。

//>>>>>>>>>>>>>>>>>>>>>>>>>


13,int32_t,size_t,等等类型名中都有 "_t" ,它貌似就是一种标注,意思是typedef的缩写。也即,int32_t,size_t都是通过typedef定义出来的。

14,std::string和std::vector对象如何释放内存呢?执行clear()函数,size()会变成0,但是capacity()不会变成0。

正确的方法是:要释放对象A的全部内存,先构造一个临时对象,再执行 "临时对象.swap(对象A)" ,完毕。

vector<int>().swap(myVector);






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值