C/C++学习笔记

《Windows via C/C++》 学习笔记 本文主要记载《Windows 核心编程》第5版的学习笔记,不断更新中。 1,源码下载 www.wintellect.com 阅读详情

1. 全局int型变量,如果不赋值,出始为0;局部变量如不赋值,初始值不确定。

 

2. 非定义的函数声明也可以写在局部作用域中,例如:

int main(void)

{

void print_time(int, int);

print_time(23, 59);

return 0;

}

这样声明的标识符print_time具有局部作用域,只在main函数中是有效的函数名,出了main函数就不存在print_time这个标识符了

虽然在一个函数体中可以声明另一个函数,但不能定义另一个函数,C语言不允许嵌套定义函数

 

3. 一般的编译器不支持变量作为数组的长度,如以下语句会编译不过:

int arrLength = 10;

int myArray[arrLength];

但以下语句可以编译过:

const int arrLength = 10;

int myArray[arrLength];

原理: 函数内部的变量存放在stack中,而函数的stack必须预先确定大小,因此大多数编译器不允许用变量指定数组大小。而有的编译器,如g++支持“preceding declaration”,所以g++可以编译通过第一段代码。

那么,如何才能动态确定数组大小呢? 参照如下代码:

int* myArray;

int arrLength = 10;

myArray = new int[arrLength];

//一些数组操作

delete[] myArray; //最后别忘了清除heep中的数组存储空间

原理: new int[arrLength]是在heap中创建数组的存储空间,而在堆中,只创建了一个数组指针,后来又指向了占内存中的数组存储控件。实现了动态确定数组大小。

 

4. 传值、传指针、传引用、常量引用

//传值

void addOne(int i)

{

i++; // Has no real effect because this is a copy of the original

}

//传指针

void addOne(int* i)

{

         *i++; // Actually changes the original variable

}

//传引用

void addOne(int& i)

{

         i++; // Actually changes the original variable

}

//常量引用

void constRef(const int& i)

{

       //常量引用的作用: 对参数产生一个不可变更的引用(而不是拷贝)

        //Do something …

}

 

5. g++ 编译和连接

我写了三个文件:

student.h 声明了一个student类

student.cpp 定义了student类的实现

testStudent.cpp 包含主函数,创建并使用student类的对象

生成可执行程序的步骤:

1. 先编译成目标文件:

g++ –c *.cpp

目录中多了两个文件: student.o  testStudent.o

2. 对目标文件进行连接:

g++ *.o

 

6.  对象创建

1. 如果类有默认构造方法,那么 在声明变量时,对象会自动创建:

AClass aObj;

aObj.aMethod();

2. 如果类没有构造方法,那么在声明时,必须指定参数:

 

AClass aObj("xxx",123);

aObj.aMethod();

3. 也可以使用new关键字创建一个对象,new表达式的值是一个指向对象的指针:

AClass* aObj = new aObj();

aObj->aMethod();

4. 使用new和不用new的区别:

如果不用new,是在栈中分配内存空间, 随着函数的结束, 空间被释放

如果用new,是在堆中分配内存空间,函数结束后,空间不会被释放,除非使用delete关键字对变量进行回收

 

《高质量C/C++编程指南》学习笔记 这本书只有短短100页,可是却可以称得上是脍炙人口。一年前初读此书时就感觉受益良多,而今再次重读,仍然不肯停顿一口气读完。针对书中指出的一些编程规则和建议,摘录下个人认为比较好的部分。 第1章 文件结构 为了防止头文件被重复引用,应当用ifndef/define/endif结构产生预处理块。 用 #include 格式来引用标准库的头文件(编译器将从标准库目录开始搜索)。 用 #incl 阅读详情

相关推荐

Linux与C/C++编程:完整学习笔记与实战案例

Linux是一个类Unix操作系统的核心,由林纳斯·托瓦兹于1991年首次发布。它遵循开源协议,允许用户自由地使用、修改和分发。Linux内核以及其上运行的软件包形成了一个庞大的生态系统。Linux的用途广泛,从嵌入式系统、服务器、超级计算机到桌面电脑,都可以看到它的身影。Linux内核是操作系统的核心组件,负责管理系统的硬件资源,提供软件运行环境,以及协调任务之间的通信。它是Linux系统能够运行各种应用软件的基础。理解内核的作用和版本是进行Linux系统管理和优化的基础知识。

weixin_42360733的博客 854

c++高级编程学习笔记

小程序“hello world” 下面的代码可能是你所遇到的最简单 C++程序: //helloworld.cpp #include <iostream> int main() { std::cout<<"Hello world!"<<std::endl; return 0; } 正如预期的那样,这段代码会在屏幕上输出“Hello,World!”这一信息。这是一个非常简单的程序,好像不会赢得任何赞誉,但是这个程序确实展现出与 C++程序格式相关的一些重要

虾球 1047

c、C+学习笔记

软件方面C++,c学习笔记,很好的参考,可以初学的看一下。

前向-后向推理与预言变量:简化分布式协议安全性证明的实用方法论

分布式系统与共识算法是构建高可靠、高可用服务的核心技术基础,其核心挑战在于确保系统在异步、故障等复杂环境下依然保持正确性。形式化证明是验证这类系统安全性的终极手段,但传统证明方法往往冗长复杂,难以理解和维护。本文介绍一套基于前向-后向推理与预言变量的证明方法论,旨在从逻辑层面简化证明过程。前向推理从协议操作推导安全属性,后向推理从目标属性反推约束条件,两者结合能结构化地分解复杂论证。预言变量作为一种关键抽象工具,将动态的系统行为“凝固”为稳定的逻辑断言(如“已提交”),从而将具体实现机制与全局安全属性解耦。

weixin_30562507的博客 438

C++ 线性代数库 Armadillo C++ Library 2.2.3

最新版2.2.3,Armadillo C++ Library 是一种C++的线性代数库(矩阵数学)以取得良好的平衡速度与易用性。整数,浮点,而复杂的数字支持,以及一个子集,三角和统计功能。各种矩阵分解是通过可选的集成 与LAPACK和Atlas图书馆。延迟评价方法,基于模板元编程,使用(在编译时)结合几个行动之一,并减少或消除需要临时量。

用Raspberry Pi Imager重装树莓派系统

这次在官网无意中看到他们出了一个Raspberry Pi Imager的工具,可以直接完成镜像烧录操作,于是就尝了个鲜。选择“编辑设置”按钮,会弹出具体的设置信息,有三个tab,第一个是General信息,包括用户名、密码、wifi和语言设置;后续的操作就和我当初第一次装树莓派系统的操作差不多,在此就不再赘述,有兴趣的朋友可以看我以前的博文。完成定制化设置后,点击“保存”按钮,软件回到前面的提示框,连续点击两个“是”,开始写入SD。第二个下拉框选择你要安装的OS,点击黄框所在的选项,可以挑选更多OS。

天飓的技术博客 1085

c++基础学习笔记

作用:在代码中添加说明和解释,方便阅读特点:编译器在编译代码时会忽略代码内容格式:(1)单行注释: //对一行代码进行说明,通常放在一行代码的上面或末尾(2)多行注释: /* */对一段代码进行说明,通常放在一段代码的上面。

2403_88328675的博客 1823

解决Calibre中license的错误

本次解决了Calibre在Cadence 617 virtuoso版本中运行不了的错误,在遇到问题的时候,我也跟你们一样,首先是上网查询为什么运行不了呢?明明我安装了之后里面有Calibre的,我当时也是这样的疑惑,一点Calibre运行LVS的时候,一片空白,然后就出现了license的错误,后来点点点,看看看,搜搜搜,最终解决了这个问题。虚拟机是VMware16版本,cadence617,Calibre是2015版本。旨在记录遇到的实际问题。

yytu231的博客 1万+

C++万字自学笔记

C++万字入门级自学笔记

八天一吨水的博客 4万+

基于微信小程序的智能门禁管理系统的设计与实现(文章+源码)

基于微信小程序门禁管理小程序,该系统支持用户注册登录、查阅新闻动态、提交开门申请和发布留言等功能,同时管理员可以进行用户管理、新闻信息管理、门禁审批管理和留言管理等操作。该系统将采用IDEA开发工具、SSM框架和MYSQL数据库等相关技术,实现用户登录注册、个人信息管理、门禁申请提交、管理员审核等功能。该系统的实现,可以有效提高门禁管理的效率和便利性,同时也具有较强的可扩展性和可维护性。本研究对于智能门禁管理系统的设计和实现具有一定的参考价值。

u011779145的博客 1401

电影台词预测类型:NLP小样本多标签分类实战

电影类型预测本质上是短文本语义建模问题,核心在于从高度碎片化、低语义密度的台词(平均仅12.7词)中挖掘隐含的类型学编码规则。其技术难点在于:需应对省略主语、倒装、拟声词等非规范表达;处理Drama与Comedy等类型强共现的多标签耦合;并克服领域迁移障碍——维基文本预训练模型在台词上性能骤降0.11。解决方案聚焦RoBERTa微调、类型感知注意力机制与标签平滑策略,兼顾小样本鲁棒性与业务可解释性,广泛适用于影视元数据标注、智能推荐系统及NLP教学实践。

weixin_33309048的博客 291

【C++学习笔记】C+(6),2024年最新帮你突破瓶颈

一个类就是一个作用域的事实能够很好的解释为什么我们在类的外部定义成员函数时必须同时提供类名和函数名。在类的外部,类内部成员的名字是不可见的。一旦遇到类名,定义的剩余部分就在类的作用域之内了,这里的剩余部分包括参数列表和函数体。结果就是,我们可以直接使用类的其他成员而无需再次授权了。请看下面的例子:#includeclass A{public:public:private:int n;n = 10;A obj;return 0;

2401_84264107的博客 1164

迪文DGUSII串口屏中文显示实战:手把手教你制作16x16点阵字库

本文提供了一份迪文DGUSII串口屏16x16点阵中文字库制作的完整实战指南。从显示原理、字体选择与参数设置,到使用FontLib Make工具生成字库文件,再到部署、调用及存储空间优化,手把手教你解决中文显示难题,确保界面文字既美观又稳定。

weixin_29190573的博客 156

我的C/C++ 学习笔记 之 约定

C/C++学习笔记《约定》制定 Version 20090109文章标题约定标题样式:[类型].[名称]                        [类型]目前包括:[FAQ] , [C学习笔记] ,[心得体会]                         如:[FAQ].基础知识文章内容约定FAQ About C/C++(持续更新)参考

三十而立 四十不惑 642

【AI工具】Browser use搭建及使用的保姆级教程:让AI帮你自动操作浏览器

【AI工具】Browser use搭建及使用的保姆级教程:让AI帮你自动操作浏览器

funfan的博客 2537

Altium Designer(AD24/25)如何在PCB设计阶段做阻抗匹配

目前阻抗匹配多直接有制版厂进行,PCB设计师在设计阶段可不关注阻抗设计,在加工阶段只需标注需要控制的阻抗线,制板厂即可按照要求对阻抗线进行调整和控制。但是对于设计师来讲掌握阻抗线的设计方法也是非常必要的。本文介绍Altium Designer(AD24/25)如何在PCB设计阶段做阻抗匹配。

fydar的博客 895

Pro C/C++学习笔记(一)

Pro C/C++学习笔记(一)

qq_43679402的博客 305

五种雷达波束模式简介及其应用场景

方位角和仰角都很窄的光束(像铅笔一样细);用于三维雷达,如仪表雷达、天气雷达和防空雷达。

珞瑜的博客 3572

【C/C++】C转C++学习笔记

帮助有C基础的朋友简单了解C++中的关键组件,快速上手C++!

ayaishere_的博客 780

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

c/cpp学习笔记

List有一个重要的性质,插入操作和删除操作都不会造成原有list迭代器的失效,这在vector是不成立的。(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的。string是一个类,类内部封装了char*,管理这个字符串,是一个char*型的容器。在多态中,通常父类中虚函数的实现是毫无意义的,主要都是调用子类重写的内容。在多态中,通常父类中虚函数的实现是毫无意义的,主要都是调用子类重写的内容。类在设计时,可以把属性和行为放在不同的权限下,加以控制。

qq_53840090的博客 1214

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

C/C++和x86汇编学习笔记片段(持续更新)

C/C++和x86汇编的学习笔记片段

Zer0Boy的博客 980

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

c/c++学习笔记

计算两个值之间的关系,所以叫关系运算符,也称为比较运算符。当两个值的关系符合关系运算符的预期是,关系运算结果为整数1,否则为整数0.

332

[Linux/C/C++ 学习笔记]系列 1.如何建立一个简单的Tcp协议的Server

0基础1天学”会“ Linux、网络编程。

weixin_51226279的博客 969

【C/C++】 学习笔记

C++ 自我学习C++二级目录C++ 高级技巧函数重载(overload)和函数重写(override)的基本规则函数重载函数重写 C++ 二级目录 C++ 高级技巧 函数重载(overload)和函数重写(override)的基本规则 转载自https://blog.youkuaiyun.com/inter_peng/article/details/53940179 函数重载 需求点: 因为在一个程序中,会出现很多很多,完成的函数功能完全相同,而仅仅是函数的参数略有不同的情形。这时如果没有函数重载这个概念,那么开

synjoker的博客 995

0001.C/C++学习笔记1

在getStr1函数被调用时,在栈上给p分配内存,在全局区给“abcd1”分配内存,在getStr1调用结束后,栈上给p分配的内存被自动回收,全局区的内存不会被自动回收。当一维数组当做函数参数时退化为一级指针,一维数组做函数形参的时候,如果在形参中定义int a[10]语句,C/C++编译器会做优化,技术推演如下:int a[10]---->int a[]---->int *a。1、由于编译器的优化选项的配置,在全局区只有一份“abcd1”,因此函数getStr1和getStr2返回的值是一样的。

Lynn的博客 2253
上一篇: [转载]Eclipse开发PHP环境配置
下一篇: (转帖)Efficient Editing With vim
Model_CZ
博客等级 码龄19年 223粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值