C Primer Plus学习
文章平均质量分 55
mylove10086
;ldfk
展开
-
谷歌 draco学习 一 压缩格网信息
draco版本是Version 1.3.6地址:https://github.com/google/draco压缩三角网,包括点的位置meshPositions、法线meshnormals、纹理坐标meshUv示例使用c++完成。具体步骤1、初始化变量和数据。初始化一个四边形,两个三角网//顶点信息float meshPositions[12] = {0, 0, 0...原创 2020-05-02 20:53:00 · 1376 阅读 · 1 评论 -
clion 编译osg源代码
网上找能找到编译osg源码的方法基本上都是使用cmake进行编译出vs的工程,因为我不喜欢用vs,所以不用生成vs的工程,不使用下面这张图的编译方法编译源码。而是直接在clion中编译osg的源码,然后直接运行源码中的示例进行学习过程很简单官网github中的源码https://github.com/openscenegraph/OpenSceneGraph我编译的源码链接...原创 2020-03-30 23:23:17 · 631 阅读 · 0 评论 -
obj转换gltf和3dtiles,c++版本支持模型压缩
使用CObjTo3Dtiles转换工具可以将obj文件转成glit和3dtiles文件。使用方法与《obj转成gltf和3dtiles》基本一样。https://blog.csdn.net/u014572215/article/details/88967108本版本添加了压缩模型方法,压缩的详细信息可以参考ceisum官网:Gabby Getz的说明 https://cesium.c...原创 2020-03-25 21:30:39 · 5165 阅读 · 15 评论 -
C Primer Plus学习 六十一 队列 ADT(一)
队列 ADT正如您所看到的,用抽象数据类型方法进行c语言编程包含下面三个步骤:1. 以抽象、通用的方式描述一个类型,包括其操作。2. 设计一个函数接口来表示这种新类型。3. 编写具体代码以实现这个接口。 您已经看到如何把这种方法应用于简单列表。现在,将其应用于一个更复杂的数据类型:队列。 17.4.1定义队列抽象数据类型 队列(queue)原创 2016-10-21 09:29:47 · 783 阅读 · 2 评论 -
C Primer Plus学习 六十 使用链表
现在您己从概念上理解了链表的工作原理,让我们来实现它。/* filirus2.c --使用运构链表*/#include#include//*提供malioc ()原型#include//*提供strcpy ()原型#define TSIZE 45 /*存放片名的数组大小*/struct film{char title[TSIZE];int rati原创 2016-10-19 18:53:54 · 1001 阅读 · 1 评论 -
C Primer Plus学习 十七 递归
递归 C允许一个函数调用其本身。这种调用过程被称作递归(recursion)。递归有时很难处理,而有时却很 方便实用。当一个函数调用自己时,如果编程中没有设定可以终止递归的条件检测,它会无限制地进行递 归调用,所以需要进行谨慎处理。 递归一般可以代替循环语句使用。有些情况下使用循环语句比较好,而有些时候使用递归更有效。递 归方法虽然使程序结构优美原创 2016-10-07 09:24:53 · 313 阅读 · 0 评论 -
C Primer Plus学习 十八 指针简介
究竟什么叫做指针? 一般来讲,指针是一个其数值为地址的变量(或更一般地说是一个数据对象)。 正如char类型的变量用字符作为其数值,而im类型变量的数值是整数,指针变量的数值表示的是地址。总结:与指针相关的运算符地址运算符: &总体注解:后跟一个变量名时,&给出该变量的地址。例如: &nurse表示变量nurse的地址。间接运算符:*总体注解:当后跟一原创 2016-10-07 14:24:45 · 224 阅读 · 0 评论 -
C Primer Plus学习 六十四 总结本书
在这本书中,我们囊括了 C的本质特性,但只是稍稍提及了库。ANSI C库包括多种有用的函数。多数实现提供针对特定系统的大量的库函数。DOS编译器为IBM PC及其兼容机提供硬件驱动控制、键盘输入和制图的函数。基于Windows的编译器支持Windows制图接口。Macintosh C编译器提供访问Macintosh 工具箱的函数,以便编写具有标准Macintosh界面的程序产品。花一些时间看看您的原创 2016-10-29 20:45:17 · 311 阅读 · 0 评论 -
C Primer Plus学习 二十 函数、数组和指针
声明数组参量由于數组名就是数组首元素的地址,所以如果实际参教是一个教组名,那么形式参量必须 是与之相匹配的指针。在(而且仅在)这种场合中,C对于int ar[]和int *ar作出同样解释,即 ar是指向int的指针。由于原型允许省略名称,因此下面的4种原型都是等价的:int sum (int *ar, int n); int sum (int *,int); int sum (i原创 2016-10-08 12:27:47 · 207 阅读 · 0 评论 -
C Primer Plus学习 五十九 从数组到链表
我们先从概念上理解一个链表实例。假设用户输入片名为Modern Times、等级为10的一部电影。程序将为一个film结构分配空间,将Modem Times字符串复制到title成 员中,并将rating成员设置为10。为了说明这个结构后面没有别的结构,程序将把next成员指针设为NULL (回忆一下,NULL是在stdio.h文件中定义的符号常量,代表空指针)。显然,需要跟踪第一个结构存储在哪里原创 2016-10-19 16:49:39 · 684 阅读 · 0 评论 -
C Primer Plus学习 五十八 高级数据表示(一)
我们来看一个数据表示的实例。假设您想要写一个程序来输入您-年中看过的所有电影(包括录像 带和DVD)的列表。对每一部电影,您想记录各种信息,比如片名、发行年份、导演、主演、片长、影片 类别(喜剧、科幻、爱情、传奇,诸如此类),您的评价等。根据这种情况,可以对每一部电影使用•个 结构,对电影列表使用结构数组。为了简化,我们将结构限制为只有两个成员:片名和您的评价(分为0 到10十个等级)。/原创 2016-10-19 16:31:53 · 383 阅读 · 1 评论 -
文件重定向 fseek()
fseek函数名: fseek功 能: 重定位流上的文件指针用 法: int fseek(FILE *stream, long offset, int fromwhere);描 述: 函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere为基准,偏移offset个字节的位置。如果执行失败(比如offset超过文件自身大小),则不改变stream指向原创 2016-11-09 20:12:45 · 374 阅读 · 0 评论 -
C Primer Plus学习 五十七 string.h库中的 memcpy ( )和 memmove ()
不能把一个数组的值直接陚予另一数组,因此,我们使用循环把数组中的元素逐个复制到另一数组。 一个例外情况是:可以使用strcpy ()和strncpy ()函数复制字符数组。memcpy ()和memmove ()函 数为复制其他类型的数组提供了类似的便利工具。下面是这两个函数的原型: void *memcpy (void * restrict si, const void * r原创 2016-10-19 13:41:05 · 294 阅读 · 0 评论 -
C Primer Plus学习 十六 函数概述
首先,什么是函数?函数(fimction)是用于完成特定任务的程序代码的自包含单元。尽管C中的函数和 其他语言中的函数、子程序或子过程等扮演着相同的角色,但是在细节上会有所不同。某些函数会导致执行 某些动作,比如primf()可使数据呈现在屏幕上;还有一些函数能返回一个值以供程序使用,如strlen () 将指定字符串的长度传递给程序。一般来讲,一个函数可同时具备以上两种功能。原创 2016-10-06 11:05:40 · 307 阅读 · 0 评论 -
C Primer Plus学习 十五 菜单输入
/* menuette.c P218 --菜单技术 */#include char get_choice(void);//选择菜单项char get_first(void);//获取每行的第一个字符int get_int(void);//获取一个整数void count(void);//int main(void){int choice;void count(v原创 2016-10-06 10:30:56 · 252 阅读 · 0 评论 -
C Primer Plus学习 十四 使用snitch进行多重选择
switch总体注解:程序控制按照expression的值跳转到相应的case标签处。然后程序流程继续通过所有剩余 的语句,直到再次由break语句重定向。expression和case标签必须都是整型值(包括类型char), 并且标签必须是常量或者完全由常量组成的表达式。如果没有与表达式值相匹配的case标签, 那么控制定位到标签为default的语句,如果它存在的话。否则,控制传递给紧原创 2016-10-05 15:18:27 · 386 阅读 · 0 评论 -
C Primer Plus学习 五十六 qsort ()函数
快速排序(quick sort)法是最有效的排序算法之一,对大型数组而言更是如此。该算法在1962年由 C.A.R.Hoare开发。它把数组不断分成更小的数组,直到变成单元素数组。首先,将数组分成两部分,其中 一部分的值都小于另一部分的值。继续这个过程,直至数组完全排好序为止。C实现的快速排序算法的函数名为qsort ()。qsort ()函数对数据对象数组进行排序,其ANSI原 型为:原创 2016-10-17 20:31:37 · 294 阅读 · 0 评论 -
C Primer Plus学习 十九 指针和数组
指针提供了一种用来使用地址的符号方法。由于计算机的硬件指令很大 程度上要依赖于地址,所以指针使您能够以类似于计算机底层的表达方式来表达自己的意愿。这使得使用 了指针的程序能够更高效地工作。特别地,指针能够很有效地处理数组。我们将看到,数组标记实际上是一种变相使用指针的形式。 我们举一个这种变相使用的例子:数组名同时也是该数组首元素的地址。也就是说,如果flizny是一个数组,下原创 2016-10-08 11:32:49 · 354 阅读 · 0 评论 -
C Primer Plus学习 二十一 指针操作
可以对指针进行哪些操作?C提供了6种基本的指针操作,下面的程序将具体演示这些操作。为了显 示每一个操作结果,程序将打印出指针的值(即指针指向的地址)、指针指向地址中存储的内容,以及指针 本身的地址(如果您的编译器不支持%p说明符,那么要想打印出地址,就需要用%u或者%lu)。//ptrlops .c 指针操作#include int main(void){int urn[5]=原创 2016-10-08 16:12:17 · 262 阅读 · 0 评论 -
C Primer Plus学习 二十二 指针操作对形式参量使用const
在K&RC中,避免此类销误惟一的方法就是箐惕不出错。ANSI C中有另一种方法。如果设计意图是函数不改变数组的内容,那么可以在函数原型和定义的形式参量声明中使用关键字const。例如sum ()的原型和定义应该如下:int sum (const int ar[],int n)i /* 原型 */int sum (const int ar[],int n) /* 定义 */{int原创 2016-10-08 16:14:10 · 285 阅读 · 0 评论 -
C Primer Plus学习 十三 逻辑运算
C的逻辑运算符逻辑运算符通常使用关系表达式作为操作数。!运算符带一个操作数。其他两个逻辑运算符 带有两个操作数:一个在左边,一个在右边。运算符 意义&& 与II 或! 非逻辑表达式:当且仅当两个表达式都为真时,expressionl&&expression2为真。如果其中一个为真或两个表达式都为真,expressionlllexpression2为真原创 2016-10-05 12:19:14 · 276 阅读 · 0 评论 -
C Primer Plus学习 十 if语句
if语句被称为分支语句(branching statement)或选择语句(selection statement),因为它提供了一个 交汇点,在此处程序需要选择两条分支中的一条前进。一般的形式如下:if (expression)statement 如果expression求得的值为真(非零),就执行statement;否则,跳过该语句。和while循环一原创 2016-10-04 15:42:57 · 248 阅读 · 0 评论 -
C Primer Plus学习 十二 使用嵌套if显示一个数的约数
// divisors.c -- 使用嵌套if显示一个数的约数#include //#include int main(void){int isPrime;//素数的标志unsigned long num;//要检査的数unsigned long div;//可能的约数printf("Please enter an integer for analysi原创 2016-10-05 11:20:48 · 238 阅读 · 0 评论 -
C Primer Plus学习 四
// talkback.c 个能为您提供一些信息的对话程序#include #include // 提供 strlen ()函数的原型#define DENSITY 62.4 //人的密度(单位是:英镑/每立方英尺)int main(void){float weight,volume;int size,letters;char name[原创 2016-09-30 09:57:08 · 323 阅读 · 0 评论 -
C Primer Plus学习 十一 ctype.h系列字符函数
/* cypheU.c --改变输入,只保留非字母字符*/#include #include int main(void){char ch;while ((ch=getchar())!='\n'){/*当一行未结束时*/if (isalpha(ch))/*如果是一个字母 */{putchar(ch+1);/*则改变它*/}else{putchar原创 2016-10-04 16:31:44 · 307 阅读 · 0 评论 -
C Primer Plus学习 九 数组
一个数组就是线性存储的一系列相同类型的值,例如10个字符或15个整数。整个数组有一个单一的 名字,单独的项或元素可以使用一个整数索引来进行访问。例如,下列声明:debts[5] = 32.54; debts[6] = 1.2e+21:float debts[20]; 声明debts是一个具有20个元素的数组,其中的每个元素都是一个类型为float的值。这个数组的第一 个元原创 2016-10-04 12:43:51 · 318 阅读 · 0 评论 -
C Primer Plus学习 八 for语句和do while语句
总结:for语句关键字:总体注解:for语句使用由分号分开的三个控制表达式来控制循环过程。initialize表达式只在循环语句 执行之前执行一次。然后对test表达式求值,如果该表达式为真(或非零)循环就被执行一次。 然后计算update表达式,接着再次检查test表达式。for语句是一个入口条件循环,即是否再 次执行循环的决定是在循环执行之前做出的。因此,有可能循环一次也不执行原创 2016-10-04 10:48:35 · 236 阅读 · 0 评论 -
C Primer Plus学习 七 while语句
总结:while语句关键字:while总体注解:while语句飾建了一个在判断表达式变为假(或零)之前重复执行的循环。While语句是一 个入口条件循环,也就是说,是否执行循环的决定是在进入循环之前就做出的。因此,循环有 可能永远不被执行。该形式的!itatement部分可以是一个简单语句或一个复合语句。形式:while (expression) statement在e原创 2016-10-03 22:38:34 · 242 阅读 · 0 评论 -
C Primer Plus学习 六 基本运算符
C使用运算符(operator)来代表算术运算,现在我们看一下用于基本算术运算的运算符: =、+、-、*,以及/ (C没有指数运算符。)。赋值运算符:=在C里,符号=不表示“相等”,而是一个赋值运算符。下面的语句将值2002赋给名字为bmw的变量:bmw = 2002;,符号=的左边是一个变量名,右边是赋给该变量的值。/* golf, c --高尔夫锦标赛记分卡*/#inc原创 2016-10-03 14:22:00 · 443 阅读 · 0 评论 -
C Primer Plus学习 五 研究和利用printf ()和scanf ()
printf ()和scanf ()函数使您能够与程序通信。它们被称为输入/输出函数,或者被简称为I/O函数。它 们不是只有您可以使用的C I/O函数,而且是最通用的I/O函数。 printf ()打印变置的指令取决于变量的类型。例如,在打印整数时使用%d符号,而在打印字符 时使用%c符号。/* pizza.c — /I:这个比萨饼的例/'中使用定义'*/#in原创 2016-09-30 13:32:10 · 534 阅读 · 0 评论 -
C Primer Plus学习 三
c有多种数据类型。基本的数据类型包含两大类:整数类型和浮点类型。整数类型的两个重要特征是其类型的大小以及它是有符号还是无符号的。最小的整数类型是char,因实现不同可以是有符号或无符号的,可以使用signed char和unsigned char确定该类型的符号属性,不过这通常用于使用此类型表示小整数而非字符编码。其他的整数类型包括short、int、long和long long类型。对于上述原创 2016-09-29 20:30:51 · 325 阅读 · 0 评论 -
C Primer Plus学习 二
C语言的一个简单的实例#include/* 头文件,预处理等*/int main(void){int num;/* 定义一个num的变量*/num=1;/* 为变量赋值*/printf("I am a simple ");/* 使用printg()函数*/printf("computer.\n");printf("My favorite number is原创 2016-09-28 19:37:27 · 299 阅读 · 0 评论 -
C Primer Plus学习 一
C Primer Plus学习原创 2016-09-27 20:54:13 · 349 阅读 · 0 评论 -
C Primer Plus学习 五十五 数学库
数学库包含许多有用的数学函数。头文件math.h提供这些函数的函数声明或原型。表16.4列举了-些 math.h中声明的函数。注意角度的单位为弧度(1弧度=l80/3.14=57.296度)。 我们用数学库来解决一个常见问题:把x/y坐标转换为长度和角度。例如,在栅格上画了一条线,该 线条水平穿过4个单元(x的值),垂直穿过3个单元(y的值)。那么,该线的长度(或称大小,m原创 2016-10-17 19:53:30 · 316 阅读 · 0 评论 -
C Primer Plus学习 五十四 内联函数
通常函数调用需要一定的时间开销。这意味着执行调用时花费了时间用于建立调用、传递参数、跳 转到函数代码段并返回。使用类函数宏的一个原因就是可减少执行时间。C99还提供另一方法:内联函 数(inline function)。C99标准这样叙述:“把函数变为内联函数将建议编译器尽可能快速地调用该函 数。上述建议的效果由实现来定义”。因此,使函数变为内联函数可能会简化函数的调用机制,但也可 能不起作用。原创 2016-10-16 21:04:50 · 546 阅读 · 0 评论 -
C Primer Plus学习 三十六 寄存器变量
通常,变量存储在计算机内存中。如果幸运,寄存器变量可以被存储在CPU寄存器中,或更一般地, 存储在速度最快的可用内存中,从而可以比普通变量更快地被访问和操作。因为寄存器变量多是存放在一个寄存器而非内存中,所以无法获得寄存器变童的地址。但在其他的许多方面,寄存器变量与自动变量是 一样的。也就是说,它们都有代码块作用域、空链接以及自动存储时期。通过使用存储类说明符register可以声明寄存器变量:原创 2016-10-13 10:36:54 · 232 阅读 · 0 评论 -
C Primer Plus学习 三十五 链接、存储时期、作用域
链接 接下来,让我们看看链接。一个C变量具有下列链接之…:外部链接(external linkage),内部链接(internal linkage),或空链接(no linkage)。具有代码块作用域或者函数原型作用域的变量有空链接,意味着它们是由其 定义所在的代码块或函数原型所私有的。具有文件作用域的变量可能有内部或者外部链接。一个具有外部链接 的变量可以在--个多文件程序的任何原创 2016-10-13 09:46:44 · 259 阅读 · 0 评论 -
C Primer Plus学习 三十四 存储类
C为变量提供了 5种不同的存储模型,或称存储类。还有基于指针的第6种存储模型,本章稍后(“分 配内存malloc()和free()”小节)将会提到。可以按照一个变量(更一般地,一个数据对象)的存储时期(storage duration)描述它,也可以按照它的作用域(scope)以及它的链接(linkage)来描述它。存储时期就是变 量在内存中保留的时间,变量的作用域和链接一起表明程序的哪些部分可以原创 2016-10-12 20:59:01 · 205 阅读 · 0 评论 -
C Primer Plus学习 三十三 string.h 其他字符串函数
ANSI C库有20多个处理字符串的函数,下面的列表总结了其中最常用的一些:• char *strcpy (char * si, const char * s2);该函数把s2指向的字符串(包括空字符)复制.到si指向的位置,返回值是sl。• char *strncpy (char * si, const char * s2,size一t n): 该函数把s2指向的字符原创 2016-10-12 11:40:43 · 266 阅读 · 0 评论 -
C Primer Plus学习 三十二 string.h sprintf()函数
sprintf ()函数是在stdio.h而不是在string.h里声明的。它的作用和printf ()—样,但是它写到字符串 里而不是写到输出显示。因此,它提供了把几个元素组合成一个字符串的一种途径。sprimf()的第一个参 数是目标字符串的地址,其余的参数和printf()一样:一个转换说明字符串,接着是要写的项目的列表。/* format:.c --格式化一个字符串*/#inclu原创 2016-10-12 10:51:04 · 206 阅读 · 0 评论