C/C++学习笔记一
1、#pragma once用法总结
为了避免同一个头文件被包含(include)多次,C/C++中有两种宏实现方式:一种是#ifndef方式;另一种是#pragma once方式。
#ifndef的方式依赖于宏名字不能冲突,这不光可以保证同一个文件不会被包含多次,也能保证内容完全相同的两个文件不会被不小心同时包含。
#pragma once则由编译器提供保证:同一个文件不会被包含多次。注意这里所说的“同一个文件”是指物理上的一个文件,而不是指内容相同的两个文件。
方式一由语言支持所以移植性好,方式二 可以避免名字冲突
2、c++四舍五入函数
3、“const char*”类型的值不能用于初始化“char”类型的实体
(1)在char*前加const关键字 const char *str1 = "ABC";
(2)对变量进行强转 char *str1 = (char *)"ABC";
(3)对变量先进行字符数组声明 char str[]="ABC"; char *str1=str;
(4)设置属性 -> C/C++ ->语言 -> 符合模式项->否
4、atoi函数源代码
isspace(int x)
{
if(x==' '||x=='\t'||x=='\n'||x=='\f'||x=='\b'||x=='\r')
return 1;
else
return 0;
}
isdigit(int x)
{
if(x<='9'&&x>='0')
return 1;
else
return 0;
}
int atoi(const char *nptr)
{
int c; /* current char */
int total; /* current total */
int sign; /* if '-', then negative, otherwise positive */
/* skip whitespace */
while ( isspace((int)(unsigned char)*nptr) )
++nptr;
c = (int)(unsigned char)*nptr++;
sign = c; /* save sign indication */
if (c == '-' || c == '+')
c = (int)(unsigned char)*nptr++; /* skip sign */
total = 0;
while (isdigit(c)) {
total = 10 * total + (c - '0'); /* accumulate digit */
c = (int)(unsigned char)*nptr++; /* get next char */
}
if (sign == '-')
return -total;
else
return total; /* return result, negated if necessary */
}
5、使用ofstream打开文件
ofstream outfile;
outfile.open("C:\\123.txt", ios::out);
if (outfile.is_open())
{
cout << "文件打开成功" << endl;
}
outfile.close();
6、寄存器变量
形同虚设,程序中不需要用。
7、枚举的使用
// EnumParam.cpp : Defines the entry point for the console application.
#include "stdafx.h"
#include <iostream.h>
enum RecordsetState {RS_OPEN = 3, RS_EDIT, RS_CLOSE = 6}; //定义枚举类型
void OperateRecordset(RecordsetState nState)
{
if (nState == RS_OPEN)
{
cout << "打开记录集" << endl;
}
else if (nState == RS_EDIT)
{
cout << "编辑记录集" << endl;
}
else if (nState == RS_CLOSE)
{
cout << "关闭记录集" << endl;
}
}
int main(int argc, char* argv[])
{
OperateRecordset(RS_OPEN); //调用函数OperateRecordset
//OperateRecordset(3); //错误的函数调用
return 0;
}
8、结构体的使用
// AssignStructure.cpp : Defines the entry point for the console application.
#include "stdafx.h"
#include "iostream.h"
const int CHAR_LEN = 128;
struct Student //定义一个结构体
{
char szName[CHAR_LEN]; //姓名
int nAge; //年龄
char szSex[CHAR_LEN]; //性别
char szAddress[CHAR_LEN]; //地址
};
int main(int argc, char* argv[])
{
Student Jeff;
Jeff.nAge = 15;
Student Annie;
Annie = Jeff;
cout << Annie.nAge << endl;
return 0;
}
9、使用指针变量访问和修改对象
// PtrAccess.cpp : Defines the entry point for the console application.
#include "stdafx.h"
#include "iostream.h"
int main(int argc, char* argv[])
{
int nLen = 10; //定义整型变量
int *pLen = &nLen; //定义指针,并进行初始化
cout << "pLen指向的数据" << *pLen << endl; //输出指针指向的数据
*pLen = 100; //设置指针指向的数据
cout << "nLen的值:" << nLen << endl; //输出变量nLen
cout << "pLen指向的数据:" << *pLen << endl; //输出指针指向的数据
return 0;
}
10、使用指针遍历数组
// IterateArray.cpp : Defines the entry point for the console application.
#include "stdafx.h"
#include "iostream.h"
int main(int argc, char* argv[])
{
int nArray[5] = {1, 2, 3, 4, 5}; //定义一个数组,包含5个元素
int *pIndex = nArray; //定义一个指针,指向数组
for(int i=0; i<5; i++) //使用指针遍历数组
{
cout << *pIndex << endl; //读取数组元素值
pIndex++; //使指针指向下一个数组元素
}
return 0;
}
11、lib 和 dll 的区别
首先两者都是代码共享的方式。
动态链接库(通常称为 DLL)是 Microsoft 开发的共享库实现。LIB 文件是静态库(也称为静态链接库)。
LIB 库可以在编译时调用,但 DLL 库只能在运行时调用。
LIB 文件明显大于 DLL 文件。
DLL 文件的一个非常常见的问题是版本控制问题。当 DLL 的代码发生更改并且应用程序使用了错误版本的 DLL 时,就会发生这种情况。LIB就没有相关的问题。但是在可重用性方面,在编写新版本的系统或全新的应用程序时,DLL 总是优于 LIB。
12、'fopen': This function or variable may be unsafe
是编译器的问题,主要是VS中出现的,微软方面认为fopen函数是不安全的,于是用fopen_s的函数来代替,用前面一个的话编译器是会出错的。
解决方法(1)在设置里添加预处理器定义。(2)改为fopen_s,但参数有些变化
具体操作添加属性->C/C++->预处理器->预处理器定义添加如下指令:
_CRT_SECURE_NO_WARNINGS
13、简述.hpp和.h的区别
.hpp,本质就是将.cpp的实现代码混入.h头文件当中,定义与实现都包含在同一文件,则该类的调用者只需要include该.hpp文件即可,无需再将cpp加入到project中进行编译。而实现代码将直接编译到调用者的obj文件中,不再生成单独的obj,采用hpp将大幅度减少调用project中的cpp文件数与编译次数,也不用再发布lib与dll文件,因此非常适合用来编写公用的开源库。
相关文章
- C++项目职工管理系统笔记-项目代码
- C++项目贪吃蛇游戏笔记-需求文档
- C++系列笔记(一)
- C++系列笔记(六)
- C++系列笔记(十二)
- 现代c++中实现精确延时方法总结
- C++学习笔记
- C++构造函数的作用_c++什么是构造函数
- C++stl库_c++库
- 《SiamFC++:Towards Robust and Accurate Visual Tracking with Target Estimation Guidelines》论文笔记
- C++11学习笔记2
- C++学习(一五九)Qt的场景图Scene Graph
- c++的链表-C++链表
- C/C++ 数据结构与算法笔记
- C/C++ 关于运算符重载笔记
- C/C++ 实现模拟键盘鼠标
- C++ 20 学习笔记1 --From BiliBili.com
- C++11新特性学习笔记
- C++ 数据结构和算法入门笔记
- 【C++】三大特性之继承
- 【C++】模板初阶&&STL简介
- C++面向对象程序设计(谭浩强)第三章第五节学习笔记
- C++面向对象程序设计(谭浩强)第三章第10~11节学习笔记
- C++11基础内容
- C++中的健壮指针和资源管理详解编程语言
- C++输入输出
- C++输入一个字符串,把其中的字符按照逆序输出的两种方法解析
- C++选择文件夹代码的封装
- C++类型转换归纳总结