指针

C,C++——指针和数组

人走茶凉 提交于 2020-01-01 18:50:42
一 指针和一维数组的关系 指向数组的指针变量称为数组指针变量 数组名是数组首个元素的地址。 数组名可以看作是一个指针常量,不可修 改。 其值为首个元素的地址值。如下用指针变量访问数组元素 int a[]={12,22,32,42,52,62,72,82,92,102}; int *pa=a; //指针变量p指向数组a的首地址 。pa等价于a 用指针变量对数组元素的访问可以采用下标形式和指针形式两种 下标形式: p[i] 指针形式: *(p+i) 举例 for ( int i = 0 ; i < 5 ; i ++ ) { //使用数组方式 cout << p1 [ i ] << " " ; cout << b [ i ] << " " ; //使用指针运算符 cout << * ( p1 + i ) << " " ; cout << * ( b + 1 ) << " " ; } 二 指针和多维数组关系 C++允许把一个二维数组分解为多个一维数组来处理。数组名是首个元素 (一维数组)的地址。如下所示定义一个二维数组a int a [ 3 ] [ 4 ] = { { 11 , 12 , 13 , 14 } , { 21 , 32 , 23 , 24 } , { 31 , 32 , 33 , 34 } , } 二维数组a可以分解为一维数组a[0],a[1],a[2]。如下图所示 数组指针

mysql C api

陌路散爱 提交于 2020-01-01 14:32:20
1. 初始化一个链接结构。 2. 创建一个链接。 3. 执行查询。 4. 关闭链接。 MYSQL* conn; 首先,声明一个conn指针指向一个MYSQL结构体,这个结构体就是一个数据库连接句柄。 conn = mysql_init(NULL); 函数mysql_init将返回一个链接句柄。 if (conn == NULL) { printf("Error %u: %s\n", mysql_errno(conn), mysql_error(conn)); exit(1); } 函数mysql_real_connect建立一个到mysql数据库的链接。调用这个函数要提供 链接句柄、主机名、用户、密码等参数,最后四个参数依次是数据库名、端口、unix套接字和客户端标志。 mysql_query() 不能传二进制BLOB字段,因为二进制信息中的\0会被误判为语句结束。 mysql_real_query() 则可以。 另外 mysql_real_query() 会比mysql_query() 略快一点儿。因为它不去检查你的SQL语句长度是多少。 MYSQL_ROW mysql_fetch_row(MYSQL_RES *result) 检索一个结果集合的下一行。当在mysql_store_result()之后使用时,如果没有更多的行可检索时,mysql_fetch_row()返回NULL

B+树|MYSQL索引使用原则

早过忘川 提交于 2020-01-01 04:57:06
‘’MYSQL一直了解得都不多,之前写sql准备提交生产环境之前的时候,老员工帮我检查了下sql,让修改了一下存储引擎,当时我使用的是Myisam,后面改成InnoDB了。为什么要改成这样,之前都没有听过存储引擎,于是网上查了一下。 事实上使用不同的存储引擎也是有很大区别的,下面猿友们可以了解一下。 一、存储引擎的比较 注:上面提到的B树索引并没有指出是B-Tree和B+Tree索引,但是B-树和B+树的定义是有区别的。 在 MySQL 中,主要有四种类型的索引,分别为: B-Tree 索引, Hash 索引, Fulltext 索引和 R-Tree 索引。 B-Tree 索引是 MySQL 数据库中使用最为频繁的索引类型,除了 Archive 存储引擎之外的其他所有的存储引擎都支持 B-Tree 索引。Archive 引擎直到 MySQL 5.1 才支持索引,而且只支持索引单个 AUTO_INCREMENT 列。 不仅仅在 MySQL 中是如此,实际上在其他的很多数据库管理系统中B-Tree 索引也同样是作为最主要的索引类型,这主要是因为 B-Tree 索引的存储结构在数据库的数据检索中有非常优异的表现。 一般来说, MySQL 中的 B-Tree 索引的物理文件大多都是以 Balance Tree 的结构来存储的,也就是所有实际需要的数据都存放于 Tree 的 Leaf

Mysql innodb索引与查询优化

只谈情不闲聊 提交于 2020-01-01 04:53:36
一、 引言 概要 (1) innodb索引类型与B+树 (2) 索引使用注意事项 (3) 车点评业务表索引优化案例 问题 (1) InnoDb索引为什么要用b+树? (2) 聚集索引与普通索引有什么区别? (3) 为什么主键最好是自增? (4) 组合索引有什么优势? (5) 有哪些实际业务场景索引搞不定? 二、 innodb索引类型与B+树 INNODB主要有几种索引:B+树索引,自适应哈希索引,全文索引 ,覆盖索引。 B+树索引是一种多叉平衡查找树。 自适应哈希索引是mysql对于频繁查询的数据采取的hash存储优化,用户无法选择设置。 全文索引主要用于全文检索使用。 覆盖索引说的是查询的字段都属于同一个索引字段,这样效率非常高。 查找树 查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(Balanced Binary Search Tree),红黑树(Red-Black Tree ),B-tree/B+-tree/ B*-tree (B~Tree)。前三者是典型的二叉查找树结构,其查找的时间复杂度O(log2N)与树的深度相关,那么降低树的深度自然会提高查找效率。 B 树 /B+ 树 /B* 树 B树 B+树 所有的叶子结点中包含了全部关键字的信息,及指向含有这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大的顺序链接。 数据库索引采用B

C语言入门(7)——指针入门

依然范特西╮ 提交于 2020-01-01 04:44:46
C语言入门(7)——指针入门 1. 指针是什么? 指针是一种保存变量地址的变量。 在计算机中每个存储单元(一个字节)都有一个编号,这个编号称为变量地址。 普通变量的值是实际值,指针变量的值是变量的地址。 取地址 我们可以在变量名前加上 & ,表示获取变量的地址。 int n = 10 ; printf ( "&n=%p\n" , & n ) ; printf ( "n=%d\n" , n ) ; 变量地址通常使用16进制表示,使用 %p 或者 %P 打印地址。 试一试,多次执行上面的代码编译的可执行文件。 scanf() 实参前面的 & 符号. 2. 指针怎么用? 2.1 定义指针 定义指针与定义变量的方式一样,只不过要在类型和变量名中间加上一个 * 星号。 类型 * 指针变量 ; 指针变量只能使用 同类型变量的地址 赋值。 int n = 10 ; int * p ; p = & n ; printf ( "&n=%p\n" , p ) ; printf ( "n=%d\n" , n ) ; 也可以直接初始化。 int n = 10 ; int * p = & n ; printf ( "&n=%p\n" , p ) ; printf ( "n=%d\n" , n ) ; 试一下 int n = 0 ; int * p = & n ; scanf ( "%d" , p ) ;

旋转数组的最小数字

穿精又带淫゛_ 提交于 2020-01-01 02:59:22
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 思路: 旋转之后的数组实际上可以划分成两个有序的子数组:前面子数组的大小都大于后面子数组中的元素 注意到实际上最小的元素就是两个子数组的分界线。本题目给出的数组一定程度上是排序的,因此我们试着用二分查找法寻找这个最小的元素。 思路: (1)我们用两个指针left,right分别指向数组的第一个元素和最后一个元素。按照题目的旋转的规则,第一个元素应该是大于最后一个元素的(没有重复的元素)。 但是如果不是旋转,第一个元素肯定小于最后一个元素。 (2)找到数组的中间元素。 中间元素大于第一个元素,则中间元素位于前面的递增子数组,此时最小元素位于中间元素的后面。我们可以让第一个指针left指向中间元素。 移动之后,第一个指针仍然位于前面的递增数组中。 中间元素小于第一个元素,则中间元素位于后面的递增子数组,此时最小元素位于中间元素的前面。我们可以让第二个指针right指向中间元素。 移动之后,第二个指针仍然位于后面的递增数组中。 这样可以缩小寻找的范围。 (3)按照以上思路

剑指offer-旋转数组的最小数字

泪湿孤枕 提交于 2020-01-01 02:55:24
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。   Step1. 和二分查找法一样,我们用两个指针分别指向数组的第一个元素和最后一个元素。   Step2. 接着我们可以找到数组中间的元素:     如果该中间元素位于 前面的 递增子数组, 那么它应该大于或者等于第一个指针指向的元素 。此时数组中最小的元素应该位于该中间元素的 后面 。我们 可以把第一个指针指向该中间元素,这样可以缩小寻找的范围 。移动之后的第一个指针仍然位于前面的递增子数组之中。     如果中间元素位于 后面的 递增子数组, 那么它应该小于或者等于第二个指针指向的元素 。此时该数组中最小的元素应该位于该中间元素的 前面 。   Step3. 接下来我们再用更新之后的两个指针,重复做新一轮的查找。 按照上述的思路,第一个指针总是指向前面递增数组的元素,而第二个指针总是指向后面递增数组的元素。最终第一个指针将指向前面子数组的最后一个元素,而第二个指针会指向后面子数组的第一个元素。也就是它们最终会指向两个相邻的元素,而第二个指针指向的刚好是最小的元素。这就是循环结束的条件。 以前面的数组{3

C语言返回字符指针的几种办法

回眸只為那壹抹淺笑 提交于 2020-01-01 02:53:32
用malloc在堆上分配空间,并返回。要注意的是,在调用函数中要free掉分配的空间。 将返回的字符指针作为函数形参传入,使用后返回该指针。 返回全局变量的字符指针。 在函数中使用static变量,放在bss段。 来源: CSDN 作者: 黑默丁格 链接: https://blog.csdn.net/kingdom54/article/details/103749350

剑指offer6:旋转数组

大城市里の小女人 提交于 2020-01-01 02:53:21
题目描述: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 思路:二分查找的一个变形 旋转之后的数组实际上可以划分成两个有序的子数组:前面子数组的大小都大于后面子数组中的元素 注意到实际上最小的元素就是两个子数组的分界线。本题目给出的数组一定程度上是排序的,因此我们试着用二分查找法寻找这个最小的元素。 思路: (1)我们用两个指针left,right分别指向数组的第一个元素和最后一个元素。按照题目的旋转的规则,第一个元素应该是大于最后一个元素的(没有重复的元素)。 但是如果不是旋转,第一个元素肯定小于最后一个元素。 (2)找到数组的中间元素。 中间元素大于第一个元素,则中间元素位于前面的递增子数组,此时最小元素位于中间元素的后面。我们可以让第一个指针left指向中间元素。 移动之后,第一个指针仍然位于前面的递增数组中。 中间元素小于第一个元素,则中间元素位于后面的递增子数组,此时最小元素位于中间元素的前面。我们可以让第二个指针right指向中间元素。 移动之后,第二个指针仍然位于后面的递增数组中。 这样可以缩小寻找的范围。 (3)按照以上思路

剑指 Offer——6. 旋转数组中的最小数字

让人想犯罪 __ 提交于 2020-01-01 02:51:53
题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的 一个旋转 ,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 思路与实现 (1)我们用两个指针 left, right 分别指向数组的第一个元素和最后一个元素。按照题目的旋转的规则,第一个元素应该是大于最后一个元素的(没有重复的元素)。 但是如果不是旋转,第一个元素肯定小于最后一个元素。 (2)找到数组的中间元素。 中间元素大于第一个元素,则中间元素位于前面的递增子数组,此时最小元素位于中间元素的后面。我们可以让第一个指针left指向中间元素。 移动之后,第一个指针仍然位于前面的递增数组中。 中间元素小于第一个元素,则中间元素位于后面的递增子数组,此时最小元素位于中间元素的前面。我们可以让第二个指针right指向中间元素。 移动之后,第二个指针仍然位于后面的递增数组中。 这样查找范围就会一半一半的缩小。 (3)按照以上思路,第一个指针left总是指向前面递增数组的元素,第二个指针right总是指向后面递增的数组元素。 最终第一个指针将指向前面数组的最后一个元素,第二个指针指向后面数组中的第一个元素。 也就是说它们将指向两个相邻的元素