指针变量

嵌入式开发之C基础学习笔记06--数组和指针(非常重要,难点)

非 Y 不嫁゛ 提交于 2020-03-15 21:50:14
C语言进阶学习 数组 1)数组的使用 2)字符串(String):数组(尤其是一维数组)最常用的地方——————>C语言中字符串就是一维数组 数组: 定义:具有相同类型的数据的有序集合,并用唯一的名字来标识。 1)数组必须直接声明,编译器在编译阶段为其分配内存空间 2)C89数组必须是定长的,数组的大小在编译时是固定的;C99允许使用变长数组,数组的大小在运行时确定 void f(int longeur,int wide) { int matrix[longeur][wide];/*定义一个矩阵*/ /*数组的长度由两个参数决定*/ } 3)数组的所有元素占连续的内存空间,在内存中是线性(顺序)存放的,保存数组所需要的内存空间直接与基本类型和数组长度有关。 数组占用的内存空间 = sizeof(基类型)*数组长度 4)C不检查数组是否越界,程序可以在两边越界。程序员应自己加入越界检查。数组可以越界使用,但是初始化时不允许! 5)向函数传递数组: 定义数组形参的方法有三种:指针,定长数组,无尺寸数组 void func1(int *a){...} void func2(int a[10]){...} void func3(int a[]){...} 在函数的形参的声明中,数组尺寸无所谓,因为C语言没有边界检查 实际上,第二种方法在编译后,编译器产生的代码就是让函数接受指针

指针知识(八):函数指针

霸气de小男生 提交于 2020-03-15 11:42:14
c++允许对指向函数的指针进行操作。它的一个重要使用是把一个函数作为参数传给另一个函数。 声明一个函数指针像声明一个函数原型一样,不过函数名 前面 插个符号 * , 然后用()扩起来。 #include <iostream> #include <string> using namespace std int addition (int a, int b) {return (a + b) ;} int subtraction (int a, int b) {return (a - b) ;} int operation(int x, int y, int (*func) (int ,int)) {   int g;   g = (*func)(x, y);   return g; } int main() {   int m, n;    int (*mins)(int, int) = subtraction;   m = operation(7, 5, addition);   n = operation(20, m, mins);   cout<<n<<'\n';   return 0; } 输出:8 上面的例子中,mins是指向函数的指针,有两个 int 类型的参数,它被直接初始化指向 subtraction : int (*mins)(int, int) =

第九课 智能指针

爷,独闯天下 提交于 2020-03-15 10:19:40
  智能指针在开发中无处不在,智能指针就是用C++模板技术实现的一个类。 智能指针历史:为了解决内存泄漏 使用智能指针: 智能指针的设计方案: 通过类模板描述指针的行为   能够定义不同类型的指针对象 重载指针特征操作符(->和*)   利用对象模拟原生指针的行为 对象在生命周期结束的时候会调用析构函数,然后在析构函数中主动的释放堆空间 C++原生语言里面不存在智能指针,我们需要自己创建智能指针。 下面我们开始正式的编写可复用库的程序,开发环境为Qt creator,首先给出智能指针的程序如下: 1 #ifndef SMARTPOINTER_H 2 #define SMARTPOINTER_H 3 4 namespace DTLib 5 { 6 7 template <typename T> 8 class SmartPointer 9 { 10 protected: 11 T *m_pointer; 12 13 public: 14 SmartPointer(T *p = NULL) 15 { 16 m_pointer = p; 17 } 18 19 SmartPointer(const SmartPointer<T>& obj) 20 { 21 m_pointer = obj.m_pointer; 22 23 const_cast<SmartPointer<T>&>(obj)

[.net 面向对象编程基础] (7) 基础中的基础——流程控制语句

旧街凉风 提交于 2020-03-15 08:33:08
[.net 面向对象编程基础] (7) 基础中的基础——流程控制语句 本来没有这一节的内容,后来考虑到既然是一个系列文章,那么就尽可能写的详细一些 , 本节参考了网上朋友所写的例子,为的是让更多小伙伴学习,提高,加薪,如有版权问题,请邮件我,我第一时间处理。 语句:是程序中的小指令,本节主要以流程控制语句为主要内容。 流程控制语句中最常用的三个是 选择语句(即条件语句)、循环语句和异常处理语句 流程控制语句分类: 类别       关键字                       选择语句       if 、 else 、 switch 、 case 循环语句       do 、 for 、 foreach 、 in 、 while 跳转语句       break 、 continue 、 default 、 goto 、 return 异常处理语句     throw 、 try-catch 、 try-finally 检查和未检查语句   checked 、 unchecked 非保护和固定语句   unsafe 、 fixed 锁定语句       lock 1. 条件语句 1.1 if - else if (expression){}else{}, 其中 expression 是一个布尔类型, true 则执行第一区块, false 则执行 else 部分

作业10总结

痞子三分冷 提交于 2020-03-14 15:43:42
一、知识点总结: 1、指针变量的定义: 1)一般形式为: 类型名: *指针变量名; ※在定义指针变量时,应注意以下几点: ①类型名指定指针变量所指向变量的类型,必须是有效的数据类型)。 ②定义多个指针变量时,每一个指针变量前面都必须加上*。 ③指针变量的类型不是指指针变量本身的类型,而是指它所指向的变量的数据类型。 ④无论何种类型的指针变量,他们都是用来存放地址的。 ⑤在定义指针变量时需要使用指针声明符*,但指针声明符并不是指针的组成部分。例如,定义int=*p; 说明p是指针变量,而不是*p。 2)指针的赋值: 指针变量被定义后,必须将指针变量和一个特定的变量进行关联后才可以使用。即,应先赋值再使用(赋的值为地址)。 假设有定义 int i,*p; /*下面的语句可以对指针变量p赋值*/ p=&i; p=0; p=NULL; p=(int*)1732; 2、几种指针表达式: *p:指针变量p所指向的变量。 如表达式*p=*p+1、++*p、(*p)++,都是将指针p所指向变量的值加1、 而表达式*p++等价于*(p++),先取*p的值作为表达式的值,再将指针p的值加一,运算后,p不在指向当前变量。 3、说明: (1)当p=&a后,*p与a相同。 (2)int *p;定义指针变量p *p=10;指针p所指向的变量,即a。 (3)&*p与&a相同,是地址 *&a与a相同,是变量 4

ofstream和ifstream详细用法

狂风中的少年 提交于 2020-03-14 15:42:12
ASCII和二进制文件的输入输出 First : 包含头文件#include <fstream> ASCII输入:   首先要创建一个in-stream对象:ifstream fin("input.txt");    逐词读取: fin>>num>>s;        读取过程中遇到空白符,>>操作符就会停止读取内容,知道遇到另一个>>操作符。    逐行读取: fin.getline(sentence, num);        第一个参数用来接受char数组;第二个参数是在遇到换行符之前,数组允许接受的最大元素数量。 ASCII输出:   首先声明一个ofstream-fout类对象( 打开 文件):ofstream fout("output.txt");    操作举例:     int num = 150;     char name[] = "John Doe";     fout << "Here is a number: " << num << "/n";     fout << "Now here is a string: " << name << "/n";    关闭文件 (自动保存文件),或者回写文件缓冲(保持文件打开的情况下保存文件):     fout << flush; fout.close(); 二进制输入输出:    声明: 不再使用插入(<<

解决项目中内存泄漏的问题

半城伤御伤魂 提交于 2020-03-13 22:10:30
根据大佬的文章而来,加上了自己代码的具体例子 关于内存泄漏的问题,根据经验总结如下(持续补充): 原则是, 有 new 就有delete 。 # 普通C++ 1 Static对象 尤其是单例模式,目的是整个程序的生命周期只有一个对象实例,但在退出时必须记得删除。(比如绑定mainwindow的析构函数,或者closeEvent等)。 /** * @brief The MAP_GR_DIS class * 采用单例模式,在private区有单一实例 * 获取实例的方法: * MAP_GR_DIS::getInstance * 举个例子: * 比如我想调用NoMeasuringDistance()这个函数 * 就可以MAP_GR_DIS::getInstance()->NoMeasuringDistance(); */ class MAP_GR_DIS: public MAP_OSG_BaseHandler { public: MAP_GR_DIS(); static MAP_GR_DIS * getInstance(); //获取单一实例的办法 static bool clickState; static void deleteDistanceObject(); private: static MAP_GR_DIS * disObject; 比如说这个类,MAP_GR_DIS

Delphi 记录类型- 结构指针

◇◆丶佛笑我妖孽 提交于 2020-03-13 13:46:51
转自:万一老师的 Delphi 博客 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class (TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); end ; var Form1: TForm1; implementation {$R *.dfm} type TRec = record {定义结构 TRec} name: string [ 12 ]; age: Word; end ; TPRec = ^TRec; {定义 TRec 结构的指针类型 TPRec} var Rec: TRec; {声明结构变量} PRec1,PRec2:

四、C++指针与引用

孤者浪人 提交于 2020-03-12 11:35:46
C++指针与引用 1.指针 1.1C++空指针 1.2指针运算 1.4指向指针的指针 1.5传递指针给函数 1.6从函数中返回指针 2.引用 2.1引用和指针的区别 2.2C++中创建引用 2.3把引用作为参数 2.4把引用作为返回值 1.指针 每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字符(&)运算符访问的地址,他表示在内存终端地址: # include <iostream> using namespace std ; int main ( ) { int var1 ; char var2 [ 10 ] ; cout << "var1 变量的地址: " ; cout << & var1 << endl ; cout << "var2 变量的地址: " ; cout << & var2 << endl ; return 0 ; } 指针是一个变量,其值为另一个变量的地址,即内存位置的直接地址。 指针进行声明: type * var - name ; int * ip ; //声明一个整形指针; char * ch ; //声明一个字符性指针; //不管时什么类型都代表内存地址的长的16位禁止; 指针使用实例: # include <iostream> using namespace std ; int main ( ) { int var = 20 ; //

《深度探索C++对象模型》第三章:Data 语意学

ぃ、小莉子 提交于 2020-03-12 11:22:57
sizeof 内存对齐的一些规则: #pragma pack(n) 预编译指令,可用来设置多少个字节对齐,n的缺省数值是按照编译器自身设置,一般为8,合法的数值分别是1、2、4、8、16,其它的无效。 offset从0开始,每个数据成员开始存放的offset值为min(n, 数据成员大小)的整数倍。 在数据成员完成各自的存放之后,整个类也将进行内存对齐,其大小为min(n, 整个类中最大成员的大小)的整数倍。 如果一个类是空类,即里面无任何数据成员,那么它会有一个隐藏的1 byte 大小,那是被编译器安插进去的一个char,这使得两个objects得以在内存中配置独一无二的地址。 sizeof的大小受到三个因素的影响: 语言本身所造成的额外负担(vptr、vbptr(有些编译器有,也有可能会共用vptr)) 编译器对于特殊情况所提供的优化处理(如空类) 内存对齐的限制 class X {}; class Y : public virtual X {}; class Z : public virtual X {}; class A : public Y, public Z {}; int main() { cout << sizeof(X) << endl; //1 cout << sizeof(Y) << endl; //4 cout << sizeof(A) << endl; /