关于C语言的一些小知识点
1.memcpy
原型:extern void *memcpy(void *dest, void *src, unsigned int count);
用法:#include <string.h>
功能:由src所指内存区域复制count个字节到dest所指内存区域。
说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。可以拿它拷贝任何数据类型的对象。
举例:char a[100],b[50]; memcpy(b, a, sizeof(b));注意如用sizeof(a),会造成b的内存地址溢出。
2.malloc()和calloc()
函数malloc()和calloc()都可以用来动态分配内存空间,但两者稍有区别。
malloc()函数有一个参数,即要分配的内存空间的大小:
void *malloc(size_t size);
calloc()函数有两个参数,分别为元素的数目和每个元素的大小,这两个参数的乘积就是要分配的内存空间的大小。
void *calloc(size_t numElements,size_t sizeOfElement);
如果调用成功,函数malloc()和函数calloc()都将返回所分配的内存空间的首地址。
函数malloc()和函数calloc()的主要区别是前者不能初始化所分配的内存空间,而后者能。如果由malloc()函数分配的内存空间原来没有被使用过,则其中的每一位可能都是0;反之,如果这部分内存曾经被分配过,则其中可能遗留有各种各样的数据。也就是说,使用malloc()函数的程序开始时(内存空间还没有被重新分配)能正常进行,但经过一段时间(内存空间还已经被重新分配)可能会出现问题。
函数calloc()会将所分配的内存空间中的每一位都初始化为零,也就是说,如果你是为字符类型或整数类型的元素分配内存,那麽这些元素将保证会被初始化为0;如果你是为指针类型的元素分配内存,那麽这些元素通常会被初始化为空指针;如果你为实型数据分配内存,则这些元素会被初始化为浮点型的零。
3.fread()
功 能: 从一个流中读数据
函数原型: int fread(void *ptr, int size, int nitems, FILE *stream);
参 数:用于接收数据的地址(指针)(ptr)
单个元素的大小(size) :单位是字节而不是位,例如读取一个整数值就是4
元素个数(nitems)
提供数据的文件指针(stream)
返回值:成功读取的元素个数
完成一次读操作(fread())后,如果没有关闭流(fclose()),则指针(FILE * stream)自动向后移动前一次读写的长度,不关闭流继续下一次读操作则接着上次的输出继续输出。
4.fflush(stdout)
在printf()后使用fflush(stdout)的作用是立刻将要输出的内容输出。
当使用printf()函数后,系统将内容存入输出缓冲区,等到时间片轮转到系统的输出程序时,将其输出。
使用fflush(out)后,立刻清空输出缓冲区,并把缓冲区内容输出。
例如:
for (ctr = 1; ctr <= wait; ctr++)
{
printf("."); /* print a dot */
fflush(stdout); /* force dot to print on buffered machines */
sleep((int) 1); /* pause 1 second */
}
用fflush(stdout)能使机器每输出一个.暂停一秒钟,而不会出现乱序(例如:PP。。。PP。PPP。。。等)现象。
5.define
#define A(x) T_##x
#define B(x) #@x
#define C(x) #x
假设:x=1,则有:
A(1)------〉T_1
B(1)------〉'1'
C(1)------〉"1"
6.assert()
assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:
#include <assert.h>
void assert( int expression );
assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。
7.static关键字
在C语言中,static的作用有三条。
(1) 隐藏。
当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。Static可以用作函数和变量的前缀,对于函数来讲,static的作用仅限于隐藏,而对于变量,static还有下面两个作用。
(2) 保持变量内容的持久。
存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。共有两种变量存储在静态存储区:全局变量和static变量,只不过和全局变量比起来,static可以控制变量的可见范围,说到底static还是用来隐藏的。
(3) 默认初始化为0。
其实全局变量也具备这一属性,因为全局变量也存储在静态数据区。在静态数据区,内存中所有的字节默认值都是0x00,某些时候这一特点可以减少程序员的工作量。比如初始化一个稀疏矩阵,我们可以一个一个地把所有元素都置0,然后把不是0的几个元素赋值。如果定义成静态的,就省去了一开始置0的操作。
最后对static的三条作用做一句话总结。首先static的最主要功能是隐藏,其次因为static变量存放在静态存储区,所以它具备持久性和默认值0。
转载于:https://www.cnblogs.com/yucan/archive/2010/12/20/1911675.html
关于C语言的一些小知识点相关推荐
- C语言的这个小知识点,竟然连开发多年的老司机都了解的不完全
printf()和scanf()是 C语言中最"多才多艺"的 I.O函数 它使用的转换说明和转义字符 能使程序员恰到好处的控制 想要输入和输出的信息 但这也提高了使用它的难度 今天 ...
- C语言 嵌入式 面试小知识点(一)
sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数. 与strlen的区别: 一.sizeof 是运算符,确切的说是一个编译时运算符,参 ...
- C语言小知识点练习总结
最近在准备C语言的上级考试,之前对C接触不多,在练习过程中把一些小知识点记录下来. 1.字符串的截取 利用strncpy函数,传入三个参数,分别为目标字符串,起始位置,长度. 例如将日期字符串转化为数 ...
- 【fpga里Verilog语言的小知识点】
提示:小白撰写,如有错误希望指出 目录 前言 总结 前言 记录一下学习fpga里Verilog语言的小知识点,持续更新. 提示:以下是本篇文章正文内容 1.A = B ? C : D 是一个条件运算符 ...
- C语言编写2048小游戏
该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/104992424 2 ...
- Python之——遇到的小知识点总结
学习过程中,难免会遇到一些冷门的小知识点,熟悉这些小知识可以在工作中达到事半功倍的效果,尽力消除自己的知识盲区.总之当时的自己花了不少功夫去解决这些问题,因此觉得有必要单独记录下来,以后也许会再遇到, ...
- 记录平时发现的一些小知识点
好记性不如烂笔头,写字太麻烦就在这里记录一些平时看到的零散的小知识点 1.c语言函数指针数组必须有相同的输入.输出值,函数指针数组可如下定义: void (*fun[256])(void); fun[ ...
- c++的一些小知识点
自己总结的一些小知识点,希望能够对大家有帮助. bool:1 char:1 wchar_t:2 char16_t:2 char32_t:4 short:2 int:4 long:4 long long ...
- LeetCode刷题遇到的小知识点总结
文章目录 1. 需要判断输入的两个参数的大小/长度 2. 数学分式的化简 3. 二叉树操作的小总结 4. MySQL分组内取前几名的问题 5. SQL中的小问题 6. 对哈希表的初步理解 (1)初步理 ...
最新文章
- 【学习笔记】线性代数全家桶(在编程竞赛中的应用)
- php 读写文件 file_put_contents() 与 file_get_contents() 函数用法
- mysql同步 触发器_mysql 触发器(数据库的同步)
- 运用@media实现网页自适应中的几个关键分辨率
- C++静态成员和静态成员函数
- shopex证书无法安装解决方法探讨
- 轻松获取LAMP环境的配置参数
- oracle客户端 tsnping时出现TNS-03505:无法解析名称
- 如何判断模糊图像_深圳企业宣传片拍摄制作教你如何使用手动聚焦
- matlab工具箱有哪些函数,matlab工具箱函数汇总(上)
- 12.51单片机实现电子音乐盒
- 菠萝派php示例,简易菠萝派 - 美食杰 - 美食,菜谱 - 中国最全的家常菜谱美食网...
- halcon 灰度投影
- 六级考研单词之路-五十四
- 海致大数据京信_海致网聚提出公安大数据背景下的个人计算新理念
- 解决ImportError: cannot import name ‘bbox_overlaps_cython‘
- 插入u盘有图标但计算机没盘,电脑没插u盘却有u盘图标显示如何解决
- Joint Discriminative and Generative Learning for Person Re-identification
- Spring Cloud微服务系统架构的一些简单介绍和使用
- 什么是分布式微服务架构?三分钟彻底弄懂什么是分布式和微服务