指针

第六周编程总结

自作多情 提交于 2020-01-17 05:26:33
这个作业属于哪个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/computer-scienceclass1-2018/homework/2892 我在这个课程的目标是 学习和掌握指针的知识和运用 参考文献 C语言程序设计II 基础作业 6.1函数题: 求两数平方根之和 函数fun的功能是:求两数平方根之和,作为函数值返回。例如:输入12和20,输出结果是:y = 7.936238。 函数接口定义: double fun (double *a, double *b); 其中 a和 b是用户传入的参数。函数求 a指针和b 指针所指的两个数的平方根之和,并返回和。 裁判测试程序样例: #include<stdio.h> #include <math.h> double fun (double *a, double *b); int main ( ) { double a, b, y; scanf ("%lf%lf", &a, &b ); y=fun(&a, &b); printf ("y=%.2f\n", y ); return 0; } /* 请在这里填写答案 */ 输出样例: 12 20 输入样例: y=7.94 实验代码: double fun (double *a, double *b) { double

转载

社会主义新天地 提交于 2020-01-17 05:21:14
转载 :http://www.cnblogs.com/lxshanye/archive/2013/05/20/3088558.html 1.变长一维数组 这里说的变长数组是指在编译时不能确定数组长度,程序在运行时需要动态分配内存空间的数组。实现变长数组最简单的是变长一维数组,你可以这样做: 1: //文件名: array01.cpp 2: #include<iostream> 3: using namespace std; 4: int main() 5: { 6: int len; 7: cin>>len; 8: //用指针p指向new动态分配的长度为len*sizeof(int)的内存空间 9: int *p=new int[len]; 10: ........... 11: delete[] p; 12: return 0; 13: } 注意int *p=new int[len];这一句,你不能这样做: int p[len]; C++编译器会报错说len的大小不能确定,因为用这种形式声明数组,数组的大小需要在编译时确定。而且这样也不行: int p[]=new int[len]; 编译器会说不能把int*型转化为int[]型,因为用new开辟了一段内存空间后会返回这段内存的首地址,所以要把这个地址赋给一个指针,所以要用int *p=new int[len]; array01

C++重要相关知识

我与影子孤独终老i 提交于 2020-01-17 03:57:11
引用与指针的区别 理解引用:一个对象的别名;指针:一个变量的地址。 就像别人可以叫我Ronald,这是一个引用。 当别人说站在第一排的那个家伙,这个是指针。看出来区别了吧,Ronald是我叫我这件事情是不会变的,而对于地址(第一排)那个家伙,其实可以站其他别人。难度等级×× 来源: CSDN 作者: wang_jun_whu 链接: https://blog.csdn.net/wang_jun_whu/article/details/104011543

C语言入门---指针初探---翁恺MOOC

假装没事ソ 提交于 2020-01-17 03:25:43
# include <stdio.h> void f ( int * p ) ; void g ( int k ) ; int main ( void ) { int i = 6 ; printf ( "&i=%p\n" , & i ) ; f ( & i ) ; g ( i ) ; return 0 ; } void f ( int * p ) { printf ( " p=%p\n" , p ) ; printf ( "*p=%d\n" , * p ) ; * p = 26 ; } void g ( int k ) { printf ( "k=%d\n" , k ) ; } 来源: CSDN 作者: watermelon_lily 链接: https://blog.csdn.net/watermelon_lily/article/details/104010048

算法笔记—2.7.5 指针的引用

ぐ巨炮叔叔 提交于 2020-01-17 01:49:10
算法笔记—2.7.5 指针的引用 /* P69-指针的引用*/ # include <stdio.h> void sawp ( int * & p1 , int * & p2 ) ; int main ( void ) { int a = 1 , b = 2 ; //scanf("%d%d",&a,&b); int * p1 = & a ; int * p2 = & b ; sawp ( p1 , p2 ) ; //printf("a= %d,b = %d",a,b); printf ( "a= %d,b = %d" , * p1 , * p2 ) ; return 0 ; } void sawp ( int * & p1 , int * & p2 ) { int * temp = p1 ; p1 = p2 ; p2 = temp ; } /* printf("a= %d,b = %d",a,b); 输出结果: a= 1,b = 2 ------------------------ printf("a= %d,b = %d",*p1,*p2); 输出结果: a= 2,b = 1 理解: 1.引用的本质就是对变量取了一个别名. 2.指针的引用,在本代码中.实际上是改变了指针的指向.也就是p1,p2所存放的地址互换了. */ 来源: CSDN 作者: pounds008 链接:

trie树 & ac自动机

拟墨画扇 提交于 2020-01-17 01:37:09
trie树 trie树就是字典树,可以理解为单词树,树上每条边是字母,被标记的节点表示根到这个节字母组成了单词。 数据结构:用二维数组trie[maxn][N],tire[u][c]表示树上编号为u的父节点以边为c单词连接到的儿子的编号。 创建trie树:每次添加一个单词,若当前路径已建立此以连接此单词为边的儿子节点就沿着走,否则建立新的节点。 学习链接: 浅谈Trie树 Trie树模板 const int maxn = 5e5 + 7 ; const int N = 26 ; struct Tire { int trie [ maxn ] [ N ] , tot ; bool book [ maxn ] ; void Init ( ) { memset ( trie , 0 , sizeof trie ) ; memset ( book , 0 , sizeof book ) ; tot = 0 ; } void Insert ( string a ) { int u = 0 ; for ( int i = 0 ; i < a . size ( ) ; ++ i ) { int v = a [ i ] - 'a' ; if ( trie [ u ] [ v ] == 0 ) { trie [ u ] [ v ] = ++ tot ; } u = trie [ u ] [ v ]

线性表---2单链表

此生再无相见时 提交于 2020-01-16 16:31:11
@Adrian 1、数据元素本身,其所在的区域称为数据域; 指向直接后继元素的指针,所在的区域称为指针域; # include <stdio.h> # include <stdlib.h> //声明结点结构 typedef struct Link { int elem ; //存储整形元素 struct Link * next ; //指向直接后继的元素的指针 } link ; //创建链表的函数 link * initLink ( ) { link * p = ( link * ) malloc ( sizeof ( link ) ) ; //创建一个头结点 link * temp = p ; //声明一个指针指向头结点,用于遍历链表 //生成链表 for ( int i = 1 ; i < 5 ; i ++ ) { //创建结点并初始化 link * a = ( link * ) malloc ( sizeof ( link ) ) ; a -> elem = i ; a -> next = NULL ; //建立新结点与直接前驱结点的逻辑关系 temp -> next = a ; temp = temp -> next ; } return p ; } //插入元素 //p为原链表,elem表示的新数据元元素,add表示新元素要插入的位置 link * insertElem

error: incomplete type ‘ ’ used in nested name specifier

江枫思渺然 提交于 2020-01-16 09:08:07
问题: error: incomplete type ‘ ’ used in nested name specifier error: invalid use of incomplete type ‘class A’ 出现类似以上的问题, 原因是类的交叉引用引起的,如A类和B类都使用了防止重复包含的宏定义,A类中包含了B类,B类中又包含了A类,结果造成重复包含了。 解决方案: 解决类的交叉引用的方案是使用类的前置声明+指针引用,指针引用作为类成员,会告诉编译器我这里指向了一个B类的对象,而不必关注该类的大小,也不必开辟对应内存,因此只需要在A类前面声明该类,告诉编译器这个类存在即可。 如: 在A.h 文件中,不仅需要包含B类#include"B.h",同时要在class A 前面加一行 class B; B类也需要同样的操作。另外,如果A类中有声明自己的指针:using pointer = std::shared_ptr<A>,在B类是不能使用A::pointer类定义A的指针的,需要重新使用std::shared_ptr<A>来定义。 来源: CSDN 作者: sampson MrLiang 链接: https://blog.csdn.net/lisemi/article/details/103918654

快速排序算法

☆樱花仙子☆ 提交于 2020-01-16 07:50:13
这个算法比较妙的地方在于有左右两个针指向左右两边断点,初始化数组的第一个值为【坑】,左指针和右指针分别和坑这个值对比,比坑小的给放在坑的左边,左指针右移,比坑大的放在右面,右指针左移,当左右指针见面的时候,循环结束,此时循环到这个索引就是这个数在这个数组中应该所处的位置。 1,2,3,4,5,6,7,8,9,10 从一个有序数组中来看,任何一个数都是比它们左边数字大,比它们右边数字小的这个规律 所以我们可以将一个无序的数不断地寻找它们合适的位置去给它进行变动 然后将其一分为二使用分治思想将其继续递归排序,逐渐缩小问题 //快速排序 public static void quickSort ( int [ ] arr , int left , int right ) { if ( left < right ) { int l = left ; int r = right ; int x = arr [ left ] ; while ( l < r ) { while ( l < r && arr [ r ] >= x ) r -- ; if ( l < r ) { arr [ l ++ ] = arr [ r ] ; } while ( l < r && arr [ l ] < x ) l ++ ; if ( l < r ) { arr [ r -- ] = arr [ l ] ;

c++ primer 中讲的顶层const 和 底层 const 理解

爱⌒轻易说出口 提交于 2020-01-16 07:22:40
c++ primer 中讲的 顶层const 和 底层 const 以前没搞懂的顶层const和底层const,这次看了后感觉明白了。 首先, const是一个限定符,被它修饰的变量的值不能改变 。 对于 一般的变量来说,其实没有顶层const和底层const的区别 , 而 只有向指针这类复合类型的基本变量,才有这样的区别。 一 如何区分顶层const和底层const 指针如果添加const修饰符时有两种情况: 1 指向常量的指针 :代表不能改变其指向内容的指针。声明时const可以放在类型名前后都可,拿int类型来说,声明时:const int和int const 是等价的。声明指向常量的指针也就是底层const,下面举一个例子: int num_a = 1; int const *p_a = &num_a; //底层const //*p_a = 2; //错误,指向“常量”的指针不能改变所指的对象 注意:指向“常量”的指针不代表它所指向的内容一定是常量,只是代表不能通过解引用符(操作符*)来改变它所指向的内容。上例中指针p_a指向的内容就不是常量,可以通过赋值语句:num_a=2; 来改变它所指向的内容。 2 指针常量 :代表指针本身是常量,声明时必须初始化,之后它存储的地址值就不能再改变。声明时const必须放在指针符号*后面,即:*const