指针变量

PHP笔记

十年热恋 提交于 2020-02-10 02:45:10
//语法错误(syntax error)在语法分析阶段,源代码并未被执行,故不会有任何输出。 /* 【命名规则】 */ 常量名 类常量建议全大写,单词间用下划线分隔 // MIN_WIDTH 变量名建议用下划线方式分隔 // $var_name 函数名建议用驼峰命名法 // varName 定界符建议全大写 // <<<DING, <<<'DING' 文件名建议全小写和下划线、数字 // func_name.php 私有属性名、方法名建议加下划线 // private $_name _func 接口名建议加I_ // interface I_Name /* 语言结构 */ array(), echo(), empty(), eval(), exit(), isset(), list(), print(), unset() echo, print 可省略括号。 /* 预定义常量 */ PATH_SEPARATOR //路径分隔符(Windows为分号,类Unix为冒号) DIRECTORY_SEPARATOR //目录分隔符 PHP_EOL //当前系统的换行符 PHP_VERSION //PHP版本号 PHP_OS //PHP服务操作系统 PHP_SAPI //用来判断是使用命令行还是浏览器执行的,如果 PHP_SAPI=='cli' 表示是在命令行下执行 PHP_INT_MAX

蓝桥杯算法训练--指针

蹲街弑〆低调 提交于 2020-02-09 18:55:48
问题描述   你的表妹正在学习整数的加法,请编写一个程序来帮助她学习。该程序调用了一个函数GetTwoInts,由它来返回两个从键盘读入的100以内的整数,然后计算这两个整数之和,并把答案显示出来。要求:在主函数中不能使用scanf等函数直接输入这两个整数,而必须通过调用GetTwoInts函数来完成,在GetTwoInts函数中可以使用scanf函数。另外,由于该函数必须同时返回两个整数,因此不能采用函数返回值的方式,而必须采用指针的方法来实现。   输入格式:输入只有一行,即两个100以内的整数。   输出格式:输出只有一行,即这两个整数之和。 1.int *x,*y声明了指针变量,但声明指针变量时,系统虽然会自动分配一个内存空间给指针变量,但这个内存空间的地址是随机的,这个地址可能指向系统不允许访问的地址或者可用的,但是暂时没有用到的地址(譬如程序没有用到的堆栈地址)等,此时即为野指针。所以,在使用指针变量之前,应该保证指针指向一个绝对可用的空间,即初始化。 2.int a,b声明int型变量时,系统会给变量a,b分配一个可用的内存空间,将变量a,b的地址赋值给指针变量x,y,此时指针变量x,y就可以使用啦~ 也就是指针必须要初始化。 #include<iostream> #include<cmath> #include<cstdio> #include<algorithm>

哈希表

為{幸葍}努か 提交于 2020-02-09 11:37:33
C语言哈希表 【1】设计数据结构 (1)哈希表由一个结构体HashTable构成 (2)结构体HashTable由两个元素组成。其一为指针数组(链式存储元素);其二为整型变量(记录元素个数) (3)指针数组类型为HashNode *(哈希节点指针) (4)结构体HashNode由数据域和指针域组成。数据域也是一种结构类型变量,指针域为一个同类型指针,为了实现链式存储。 (5)数据域结构体ElemType由关键码以及其他相关信息组成(在此程序里没有添加) (6)拟定哈希表长度为13 【2】C语言表示数据结构 1 #define M 13 2 typedef int KeyType; 3 typedef struct 4 { 5 KeyType key; 6 //otherinfo; 7 }ElemType; 8 typedef struct _Node 9 { 10 ElemType data; 11 _Node *next; 12 }HashNode; 13 typedef struct 14 { 15 HashNode *table[M]; 16 int len; 17 }HashTable; 【3】函数设计 在设计函数之前,让我们先理解一下基本的逻辑: 哈希表中存储的每个元素都有一个关键码,而每个关键码都可以通过与哈希表的总数取模(当然这个算法可以任意选择)得到一个索引

python调用golang编写的动态链接库

末鹿安然 提交于 2020-02-09 07:42:18
楔子 我们都知道python的效率很低,但是好在可以和C语言无缝结合,C语言写好扩展模块之后再让python去调用简直不要太方便。但是使用C编写扩展模块也不是件容易的事情,于是笔者想到了go,go的效率虽然不如C,但是也没有逊色太多。而且go毕竟是一门高级语言,丰富的标准库、数据类型,编写扩展模块比C方便太多了。下面我们就来看看如何使用golang编写扩展模块交给python调用。 另外python和go之间进行交互,本质上是通过C语言来作为媒介的。在go中定义函数,参数和返回值需要是C中的类型,python调用时,参数和返回值也要指定为C中的类型。而这里只会介绍golang和C中的类型如何转换,至于python的类型和C的类型如何转换我只会直接拿来用,就不写注释介绍具体的用法了。因为python和C中的类型如何转换,比如如何在python中实现C中的数组、结构体等等,我在另一篇博客中 https://www.cnblogs.com/traditional/p/12243307.html 已经介绍的比较详细了,如果对python类型和C的类型之间的转化不是很清楚的小伙伴,可以先去看一看。 举个小栗子 package main import "C" //export age_incr_1 func age_incr_1(age int) int { return age + 1 }

变量的地址和指针

最后都变了- 提交于 2020-02-09 01:43:15
一、变量的地址和指针 计算机中有一个硬件叫做内存条,当我提起这个硬件的时候往往都会说多大的。1G、2G、4G…这都是在说它的空间小,计算机中的内存都是以字节为单位的一片连续的内存空间,每一个字节都有一个编号,这个编号就称为内存地址,如同旅馆的房间一样,单人间、双人间等等,每个房间都有自己的编号。 内存中的空间是连续的,地址号也是连续的,并且都是用二进制来表示的。 变量在定义的时候先要说明定义的类型,如int k,double b,char ch等等如此的定义。这样是在和电脑系统打招呼,我们是俩人要一个两人间,目的就是告诉老板你的房间要的是两个人的空间。不能有定的是两人间,结果来了三个人住;同时也不能定的是两人间,结果就你自己来了(对自己多花钱了)。 综上所诉: 变量的定义就是给变量开辟存储空间的过程 int a float b a a b b b b 1012 1013 1014 1015 1016 1017 这就是变量定义的时候系统给随机开辟的地址空间,再结合我们在一开始讲的不同类型的变量大小,其实就是在说变量所占的内存单元的多少。 1012就是整型变量a的首地址,1014就是浮点类型b的首地址。 当要用一个变量时,系统就会迅速的找出处这个变量,所以在C程序中还有一个这样的变量存在,就是 指针 指针就是用来存放一个变量在内存中的地址,当要调用这个变量的时候就能迅速找到,

9、指针

空扰寡人 提交于 2020-02-08 19:42:18
指针 指针类型用于表示内存地址,本质上是一个整数。对于指针类型的变量,可以使用星号操作,对指定的内存地址进行读写。 内存地址的表示 变量和内存是对应的,每个变量都对应于若干字节的内存。当读取一个变量的值时,其实就是读取内存的值。当修改一个变量的时候,其实就是修改了内存的值。 例如,下面的定义的变量 a 在内存对应4个字节。 unsigned int a = 0xA0A0A0A0; // a 内存中的值:A0 A0 A0 A0 a = 0xB1B1B1B1; // a 内存中的值:B1 B1 B1 B1 把变量所对应的内存的地址,简称为变量的地址。变量的地址是一个整数,可以用操作符 & 来取得。例如: int a = 0; double b = 0; printf("%08x\n",a); // 把地址按十六进制打印 printf("%08x\n",b); // 把地址按十六进制打印 指针的概念 带星号的类型,称为指针类型。这种类型定义的变量,称为指针类型的变量,简称指针变量,或称为指针,例如: #include<stdio.h> int main() { int a = 10; int b = 11; int* p = &a; // p 指向变量 a 的地址 p = &b; // 修改 p 的值,现在指向了变量 b 的地址 return 0; } 星号操作 在引入指针之后

C++处理异常技巧-try,catch,throw,finally

一个人想着一个人 提交于 2020-02-08 19:15:51
异常处理的基本思想是简化程序的错误代码,为程序键壮性提供一个标准检测机制。 也许我们已经使用过异常,但是你会是一种习惯吗,不要老是想着当我打开一个文件的时候才用异常判断一下,我知道对你来说你喜欢用return value或者是print error message来做,你想过这样做会导致Memory Leak,系统退出,代码重复/难读,垃圾一堆…..吗?现在的软件已经是n*365*24小时的运行了,软件的健壮已经是一个很要考虑的时候了。 自序: 对写程序来说异常真的是很重要,一个稳健的代码不是靠返回Error Message/return Value来解决的,可是往往我们从C走过来,习惯了这样的方式。 仅以本文献给今天将要来临的流星雨把,还好我能在今天白天把这写完,否则会是第4个通宵了;同时感谢Jeffrey大师,没有他的SEH理论这篇文章只能完成一半,而且所有SEH列子的构想都来自他的指导;另外要感谢Scott Meyers大师,我是看他的书长大的;还要感谢Adamc / Darwin / Julian ,当然还有Nick的Coffee 内容导读: (请打开文档结构图来读这篇文章。) 本文包括2个大的异常实现概念:C++的标准异常和SHE异常。 C++标准异常:也许我们了解过他,但你有考虑过,其实你根本不会使用,你不相信,那我问你:垃圾回收在C++中怎么实现?其实不需要实现,C+

赋值操作符和拷贝构造函数

南笙酒味 提交于 2020-02-08 11:25:33
今天在看一个消息结构的定义类时,有一个这样的接口 WF_MSG & operator=(const WF_MSG & _msg); 开始不是很明白,后来才知道这是赋值操作符,也通过这个深刻了解了赋值操作符,因为还定义了一个unsigned char * m_pMsgBuffer; /// 消息缓存指针 的指针,一般默认的赋值操作符是浅拷贝,而因为有消息缓存指针的变量,当这个消息类有两个对象时,如果一个消息赋值给另外一个消息,则会涉及到深拷贝的问题,所以要重新定义赋值操作符 这里有一博客,叙述的很详细,给大家分享下: 赋值运算符和复制构造函数都是用已存在的B对象来创建另一个对象A。不同之处在于:赋值运算符处理两个已有对象,即赋值前B应该是存在的;复制构造函数是生成一个全新的对象,即调用复制构造函数之前A不存在。 CTemp a(b); //复制构造函数,C++风格的初始化 CTemp a=b; //仍然是复制构造函数,不过这种风格只是为了与C兼容,与上面的效果一样 在这之前a不存在,或者说还未构造好。 CTemp a; a=b; //赋值运算符 在这之前a已经通过默认构造函数构造完成。 实例总结: 重点:包含动态分配成员的类 应提供拷贝构造函数,并重载"="赋值操作符。 以下讨论中将用到的例子: class CExample { public: CExample(){pBuffer

线性表的链式存储结构

生来就可爱ヽ(ⅴ<●) 提交于 2020-02-08 10:52:23
特点:用一组任意的存储单元存储线性表的数据元素,这组存储单元可以存在内存中未被占用的任意位置。 存取数据元素信息的域称为数据域,把存储直接后继位置的域称为指针域。指针域中存储的信息称为指针或链。这两部分信息组成数据元素称为存储映像,称为结点。 单链表 因为每个结点中只包含一个指针域,所以称为单链表。 我们把链表中第一个结点的存储位置叫做头指针,最后一个结点指针为空(NULL)。 头指针: - 头指针是指链表指向第一个结点的指针,若链表有头结点,则是指向头结点的指针。 - 头指针具有标识作用,所以常用头指针冠以链表的名字,(指针变量的名字)。 - 无论链表是否为空,头指针均不为空。 - 头指针是链表的必要元素。 头结点: - 头结点是为了操作的统一和方便而设立的,放在第一个元素的结点之前,其数据域一般无意义(但也可以用来存放链表的长度) - 有了头结点,对于在第一元素结点前插入结点和删除第一结点起操作与其他结点的操作就统一了。 - 头结点不是链表的必要元素。 PS:我们所看到的结点是由存放数据元素的数据域和存放后继结点地址的指针域组成。 来源: https://www.cnblogs.com/strator/p/7219915.html

C++ 的const使用总结

我的梦境 提交于 2020-02-08 09:48:00
const修饰符 常量的定义: 在变量前面添加修饰符 const。 1,const修饰基本数据类型构成常量。 1,const int a = 5. a是不能修改的。 2,int b = 5; const int a = b; b发生变化,a不会发生变化。 2,const修饰指针。 1,常量指针。 指向常量的指针。 const int a = 10; //常量 const int * p = &a; //常量指针 *p 不能被修改 p的值可以被修改 应用:strlen(const char * str); 不能对指针指向的常量进行修改,从而保护了数据 2,指针常量。 指针本身为常量,只能指向固定的位置。 int a = 10,b = 20; int *const p = &a; p是不能修改的 *p可以修改 3,指向常量的指针常量。指针指向了常量,指针本身也是常量。 const int a = 1,b = 2; const int * const p = &a; p不能修改 *p也不能被修改 3,const修饰引用。 int a = 10; const int & ra = a; ra = 5; //error a = 5; const修饰引用,const修饰的引用变量不能被修改,a的值可以被修改。 使用场景,一般用在函数的形参的传入过程中。void fun(const string