sizeof

C++基础入门(数据类型)

北城以北 提交于 2020-01-14 10:52:19
数据类型 整型 sizeof关键字 实型(浮点数) 字符型 转意字符 字符串 布尔类型 数据的输入 C++规定在创建一个变量或者常量时,必须要指定出相应的数据类型,否则无法给变量分配内存 。 整型 作用 :整型变量表示的是 整数类型 的数据 C++中能够表示整型的类型有以下几种方式, 区别在于所占内存空间不同 : 数据类型 占用空间 取值范围 short(短整型) 2字节 (-2^15 ~ 2^15-1) int(整型) 4字节 (-2^31 ~ 2^31-1) long(长整形) Windows为4字节,Linux为4字节(32位),8字节(64位) (-2^31 ~ 2^31-1) long long(长长整形) 8字节 (-2^63 ~ 2^63-1) sizeof关键字 **作用:**利用sizeof关键字可以 统计数据类型所占内存大小 语法: sizeof( 数据类型 / 变量) 示例: int main ( ) { cout << "short 类型所占内存空间为: " << sizeof ( short ) << endl ; cout << "int 类型所占内存空间为: " << sizeof ( int ) << endl ; cout << "long 类型所占内存空间为: " << sizeof ( long ) << endl ; cout <<

iphone利用AudioQueue播放wav(PCM码)

徘徊边缘 提交于 2020-01-14 08:37:50
续上一篇 iphone利用AudioQueue播放音频文件(mp3,aac,caf,wav等) 绝对原创,转载请注明出处: http://www.cnblogs.com/xuanyuanchen/admin/EditPosts.aspx?postid=2450169 1、ffmpeg解码音频流并且保存成wav文件。  这一步比较简单,只要熟悉ffmpeg解码音频的流程,将解码出的pcm码,保存到本地文件中,并实时统计解码的pcm的字节长度,最后解码完成之后再添加44字节的wav文件头。 save_audio.c View Code 1 #include <stdio.h> 2 #include "libavformat/avformat.h" 3 #include "libavcodec/avcodec.h" 4 #include "libavutil/avutil.h" 5 static void writeWavHeader(AVCodecContext *pCodecCtx,AVFormatContext *pFormatCtx,FILE *audioFile) { 6 int8_t *data; 7 int32_t long_temp; 8 int16_t short_temp; 9 int16_t BlockAlign; 10 int bits=16; 11 int32

A weird difference between strlen() and sizeof()

夙愿已清 提交于 2020-01-14 07:00:08
问题 I tried to test the difference of sizeof and strlen but I found something strange today. The code is as follow. #include <iostream> #include <string.h> using namespace std; int main() { char a[]={"I am a boy"}; char b[]={'I',' ','a','m',' ','a',' ','b','o','y'}; cout << "sizeof(a) = " << sizeof(a) << endl << "sizeof(b) = " << sizeof(b) <<endl; cout << "strlen(a) = "<< strlen(a) << endl << "strlen(b) = " << strlen(b) << endl; return 0; } The result is as follow: sizeof(a) = 11 sizeof(b) = 10

Linux 进程间通信 --消息队列

醉酒当歌 提交于 2020-01-13 18:36:34
一、消息队列   消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。   每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题。   但是消息队列与命名管道一样,每个数据块都有一个最大长度的限制。   消息队列是系统内核地址空间中的一个内部的链表。消息可以按照顺序发送到队列中,也可以以几种不同的方式从队列中读取。每一个消息队列用一个唯一的IPC标识符表示。 二、   在<sys/msg.h>中,消息队列的数据结构是这样定义的: struct msgbuf{ long mtype; /*type of message, must>0*/ char mtext[1]; /*message text*/ }; 在数据结构msgbuf中共有两个元素: mtype指消息的类型,它由一个整数来代表,并且它只能是大于0的整数。 mtext是消息数据本身。 mtext字段不但可以存储字符,还可以存储任何其他的数据类型。此字段可以说是完全任意的,因为程序员自己可以重新定义此数据结构。请看下面重新定义的例子: struct my_msgbuf{ long mtype; /*Message type*/ char request_id; /*Request identifier*/ struct client

C语言06-函数的调用过程II、数组

[亡魂溺海] 提交于 2020-01-13 18:20:18
文章目录 函数调用过程 栈帧的概念 数组 sizeof 函数调用过程 函数调用过程中的步骤: 按照调用约定传参 保存返回地址 流程转移 保存上一层栈帧地址 开辟局部变量空间 开始执行被调用函数的代码 详细得展示各个步骤。 栈帧的概念 我们已经知道,因为每个函数被调用过程,那个函数的参数、局部变量、返回地址, 都会放在一断 特定的栈区域中 ,并且 每个被调用的函数,都对应了一段特定的栈区 域,那一段特定的栈区域 ,称为 那一个被调用函数的栈帧 。 void Fun2(int arg) { int nValue = 0; printf("fun2:%08X, %p\r\n", &arg, &nValue); } void Fun1(int arg) { int nValue = 0; Fun2(0x22222222); printf("fun1:%08X, %p\r\n", &arg, &nValue); } int main(int argc, char* argv[]) { printf("main:%p\r\n", &argc); Fun1(0x11111111); return 0; } 通过以上代码可以验证,紧挨着返回地址的“栈帧”,确实是指向了 上一层调用方的栈帧 ,这种设计,使得当前函数结束后,程序流程都可以顺利地找到上一层栈帧。 通过以上的图和代码实验

C语言08-数组II:数组传参、二维数组

泄露秘密 提交于 2020-01-13 17:35:21
文章目录 二维数组 二维数组寻址公式 数组传参 二维数组 二维数组寻址公式 对于 type ary2D[M][N] 其ary2D[i][j]语速对应的地址是: a r y 2 D + ( i × N + j ) × s i z e o f ( t y p e ) ary2D+(i\times N+j)\times sizeof(type) a r y 2 D + ( i × N + j ) × s i z e o f ( t y p e ) char g_Data[6]; void SetElement23(int nRow, int nCol, char chValue) { g_Data[nRow * 3 + nCol] = chValue; } void SetElemet32(int nRow, int nCol, char chValue) { g_Data[nRow * 2 + nCol] = chValue; } int main(int argc, char* argv[]) { SetElement23(1, 2, 'a'); SetElemet32(2, 0, 'b'); return 0; } 数组传参 预测以下代码结果( 还需要看 ) void Fun(char chAry[30]) { printf("%d\r\n", sizeof(chAry)); }

C++STL库String类实现

巧了我就是萌 提交于 2020-01-13 14:50:11
前言:按照源码中String类的设计方式实现简单的写了一个myString,参考 C++官网中的标准stringAPI 完成几乎所有的String类的方法,尽量与源码实现风格类似,有部分没实现有的功能之间相似度较高,重复工作意义不大就没写,有的是没办法写。 亲自在我写的数据结构课设哈弗曼树中使用,没有出现特殊问题,自己测试也没有出问题,如果哪里有错希望大家可以给我指出来。 (一) 关于扩容 在开始写的时候我先查阅相关资料和源码,对与String的扩容,我发现在源码中String的实现里,它预先会有一个16字节的在栈区的缓冲区,如果你的String对象不到16字节,则不会申请堆区内存使用这部分栈区内存,在所占内存较小的情况下,直接使用栈区内存的会增强运行效率,提高CPU cache命中率,而当你使用的string类占据内存过大时,据我查我的系统(Deepin 15.10.1),默认栈内存只开辟8192KB。 如果String类对象所占内存过大,很有可能程序直接爆栈,所以,在字符串内存高于16字节时,会开辟堆区内存,在源码中,为了节省空间,在这里使用了一个联合体,下面是该联合体结构。 我自己模拟的结构 enum { BUF_LEN = 16 } ; union _Bxty { char _Buf [ BUF_LEN ] ; char * _ptr ; } _Bx ; 在扩容的时候

21天学通C语言-学习笔记(4)

会有一股神秘感。 提交于 2020-01-13 10:20:05
第4章 基本数据类型 本章将重点介绍C语言提供的三组基本数据类型的使用,包括:整型、字符型和浮点型。C语言的其他高级数据类型实质上都可以视为这些基本数据类型的组合。通过本章的学习,要掌握以下知识: 各种整型数据类型的使用; 各种字符型数据类型的使用; 各种浮点型数据类型的使用; 使用 printf 函数和 scanf 函数处理各种类型的数据; 使用 typedef 自定义数据类型; 限定词 const 和volatile的使用。 4.1 整型数据类型 C语言定义了4种整型数据类型以表示不同大小的整数数值。 short int:短整型 int:整型 long int:长整型 long long int:长长整型 本节将介绍各种整型数据类型的字节长度、整型常量和整型变量的使用,以及使用整型类型的存储方式和范围。 4.1.1 字节长度 在不同的编译器和不同的硬件环境中,整型数据类型的字节长度可能不同,但是都具有以下关系:short int 型的长度不大于 int 型的长度,int 型的长度不大于 long int 型的长度,long int 型的长度不大于 long long int 型的长度。 【范例4-1】 输出各整型的字节长度,实现方法如示例代码4-1所示。 示例代码4-1 #include <stdio.h> int main(void){ printf("sizeof

socket常用函数

谁说胖子不能爱 提交于 2020-01-13 09:37:57
======== TCP ======== TCP_Server socket() bind() listen() accept() write() read() close() 和shutdown() TCP_Client socket() connect() send() 和recv() close() 和shutdown() ======== UDP ======== UDP_Server socket() bind() sendto() 和recvfrom() close() 和shutdown() UDP_Client socket() sendto() 和recvfrom() close() 和shutdown() getpeername() gethostname() -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- socket() 我们使用系统调用socket()来获得文件描述符: #include<sys/types.h> #include<sys/socket.h> int socket

Is it guaranteed that sizeof(T[N]) == N * sizeof(T)?

本秂侑毒 提交于 2020-01-13 08:57:07
问题 I had always assumed that the size of an array of N elements of type T , as returned by sizeof was guaranteed to be exactly N times sizeof(T) . The comments on this question made me doubt it though. There are claims from reputable users that arrays may contain padding, which would break the equality. Of course such platforms may not exist, but are they allowed? If allowed, this would break many common idioms, such as calculating the needed storage for an array with N * sizeof(T) , or