指针

自考新教材-p233

吃可爱长大的小学妹 提交于 2020-01-12 19:32:01
基类与派生类之间的互相转换,使用指针的情况 源程序: /*--> */ /*--> */ #include<iostream> using namespace std; class CBase { protected: int n; public: CBase(int i):n(i){} void Print() { cout<<"CBase:n="<<n<<endl; } }; class CDerived:public CBase { public: int v; CDerived(int i):CBase(i),v(2*i){} void Func(){}; void Print() { cout<<"CDerived:n="<<n<<endl; cout<<"CDerived:v="<<v<<endl; } }; int main() { CDerived objDerived(3); CBase objBase(5); CBase *pBase = &objDerived; CDerived *pDerived; pDerived = &objDerived; cout<<"使用派生类指针调用函数"<<endl; pDerived->Print(); pBase=pDerived; cout<<"使用基类指针调用函数"<<endl; pBase->Print(); /

C语言基础:指针

旧街凉风 提交于 2020-01-12 18:10:52
【指针】 一、指针变量与定义 C语言有两种变量:其中变量(普通变量)存储内容值;地址变量(指针变量)存储地址值。 1、定义格式 类型名 *指针变量名;*是指针变量的标志,不包含在变量名里 注: (1)定义变量(普通变量、指针变量)都必须在前面有类型名。前类型后分号为定义语句。除此之外,其它语句都是执行语句。 (2)在定义指针变量时,指针变量名前的 * 表示现定义的是一个指针类型变量。星号并不是指针变量名的一总分,只是一个标志。 (3)指针变量专门用来存地址,禁止将一个整型直接赋给一个指针变量。 2、指针变量的引用 “&”取地址运算符,通过&运算符可以取出普通变量的地址。 “*”指针运算符,*可以取出指针变量所指向的普通变量的值(间接引用普通变量)。功能是 *地址 -》 取出内容值。 “&”“*”是单目运算符,优先级2级,方向从右向左 指针变量运算方法:(口诀四)地址变量得地址,得谁地址指向谁, 有*为内容值,不是读就是写,*在赋值号左边为写,其它都为读。无*为地址值,地址赋值意味着改指向。 注: (1)可以通过赋值使一个指针变量“指向”某一普通变量(指针变量=&普通变量)。 指针变量必须定义且初始化后再使用。 (2)在C语言中正确的做法是先让指针变量指向一个确定的存储单元后,再通过该指针变量引用它所指向的存储单元。 (3)变量名(普通变量、指针变量)都表示其存储单元内的值。 (4

子函数通过一级指针访问二维数组

痞子三分冷 提交于 2020-01-12 17:15:34
#include <stdio.h> #define COLS 10 #define ROWS 6 char erwei[6][10]={{1,2,3,4,5,6,7,8,9,10}, {10,9,8,7,6,5,4,3,2,1}, {1,2,3,4,5,6,7,8,9,10}, {10,9,8,7,6,5,4,3,2,1}, {1,2,3,4,5,6,7,8,9,10}, {10,9,8,7,6,5,4,3,2,1} }; test (char *image){ int i,j=0; for(i=0;i<COLS*ROWS;i++){ printf("image[%d][%d]%d\n",i,j,*image); image++; } } test2 (char *image){ int i,j=0; for(i=0;i<ROWS;i++){ for(j=0;j<COLS;++j){ printf("image[%d][%d]%d\n",i,j,image[i*10+j]); } } } void main() { test((char *)erwei); // test(&erwei); printf("\n\n\n"); test2((char *)erwei); // test2(&erwei); return 0; } 来源: https://www.cnblogs

C语言关键字const应用解析

被刻印的时光 ゝ 提交于 2020-01-12 14:46:06
只要学过C语言的,都有知道const这个关键字,知道是用来定义常量的,如果一个变量被const修饰,那么它的值就不能再被改变,那么还有什么其他作用呢? 一、const常用作用 1.修饰局部变量 const int n=5; int const n=5;/*二者是等价的,均表示变量n的值不能被改变了*/ 注意:在使用const修饰变量时,一定要给变量初始化,否则之后就不能赋值了! 接下来看看const用于修饰常量静态字符串,例如: const char * str = "fdsafdsa" ; 如果没有const的修饰,我们可能会在后面有意无意的写str[4]=’x’这样的语句,这样会导致对只读内存区域的赋值,然后程序会立刻异常终止。有了const,这个错误就能在程序被编译的时候就立即检查出来,这就是const的好处。让逻辑错误在编译期被发现。 2. 常量指针与指针常量 常量指针 是指针指向的内容是常量,可以有一下两种定义方式。 const int * n ; int const * n ; 需要注意的是一下两点: 1、常量指针说的是不能通过这个指针改变变量的值,但是还是可以通过其他的引用来改变变量的值的。 int a=5; const int* n=&a; a=6; 2、常量指针指向的值不能改变,但是这并不是意味着指针本身不能改变,常量指针可以指向其他的地址。 int a=5;

2019年春季学期第六周作业

淺唱寂寞╮ 提交于 2020-01-12 14:27:54
A Q 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 2019春第六周作业 我在这个课程的目标是 尽可能了解并且应用指针及文件和数组的知识 这个作业在那个具体方面帮助我实现目标 大致掌握了数组的简单编程及应用,了了解了文件和指针的基础知识和简单应用 参考文献 C语言chap11 和 C语言chap10 一、本周完成的作业 题目1. 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 1).实验代码 double fun (double *a,

c++指针作为形参常见问题--2

﹥>﹥吖頭↗ 提交于 2020-01-12 13:41:47
【案例1】【错误案例】 #include<iostream> #include<cstddef> #include<cstdio> #include<cstdlib> #include<cstring> using namespace std; typedef struct charlink { char ch; struct charlink *next; } CharLink; void insertCharLink(CharLink *q,const char *chr) { printf("#3 void insertCharLink q %p\n",q); CharLink *t = (CharLink*)malloc(sizeof(CharLink)); t->ch = *chr; t->next = NULL; q->next = t; q = q->next; printf("#4 void insertCharLink q %p\n",q); } int main() { const char str1[] = {'2','3','5','\0'}; CharLink *p = (CharLink*)malloc(sizeof(CharLink)); p->next=0; p->ch = 'Q'; CharLink *h = p; int i=0; printf(

指针(下)

你。 提交于 2020-01-12 08:21:03
指针作为函数参数: #define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <string.h> #include <stdio.h> void print(int * arr,int len) { //函数参数中如果有指针 数组 都会转化为指针 sizeof求出来的是指针类型的大小 无符号整数类型 4 所以求出来得知不能作为数组的循环条件 for (int i = 0; i < len; i++) { printf("%d\n", arr[i]); } } int main() { int arr[] = { 1, 2, 3, 4, 6, 0, 7, 8, 9, 10 }; print(arr,sizeof(arr)/sizeof(arr[0])); system("pause"); return EXIT_SUCCESS; } //1.数组作为函数参数可以退化为指针 //2.在传递数组时需要加上传递个数 void print(char * arr) { //两种方式求出字符串长度 int len = strlen(arr); } int main() { char arr[] = "hello world";//有判断条件\0 print(arr); return 0; } 函数的返回值是指针: #define

B树、B-树、B+树、B*树

无人久伴 提交于 2020-01-12 07:44:16
B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 如: B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中; 否则,如果查询关键字比结点关键字小,就进入左儿子;如果比结点关键字大,就进入 右儿子;如果左儿子或右儿子的指针为空,则报告找不到相应的关键字; 如果B树的所有非叶子结点的左右子树的结点数目均保持差不多(平衡),那么B树 的搜索性能逼近二分查找;但它比连续内存空间的二分查找的优点是,改变B树结构 (插入与删除结点)不需要移动大段的内存数据,甚至通常是常数开销; 如: 但B树在经过多次插入与删除后,有可能导致不同的结构 上边也是一个B树,但它的搜索性能已经是线性的了;同样的关键字集合有可能导致不同的 树结构索引;所以,使用B树还要考虑尽可能让B树保持左图的结构,和避免右图的结构,也就 是所谓的“平衡”问题; 实际使用的B树都是在原B树的基础上加上平衡算法,即“平衡二叉树”;如何保持B树 结点分布均匀的平衡算法是平衡二叉树的关键;平衡算法是一种在B树中插入和删除结点的 策略; 2、 B-树 是一种多路搜索树(并不是二叉的): 1.定义任意非叶子结点最多只有M个儿子;且M>2; 2.根结点的儿子数为[2, M]; 3

c++构造函数详解

邮差的信 提交于 2020-01-12 05:11:03
c++构造函数的知识在各种c++教材上已有介绍,不过初学者往往不太注意观察和总结其中各种构造函数的特点和用法,故在此我根据自己的c++编程经验总结了一下c++中各种构造函数的特点,并附上例子,希望对初学者有所帮助。 c++类的构造函数详解 一、 构造函数是干什么的 class Counter { public : // 类Counter的构造函数 // 特点:以类名作为函数名,无返回类型 Counter() { m_value = 0; } private : // 数据成员 int m_value; } 该类对象被创建时,编译系统对象分配内存空间,并自动调用该构造函数->由构造函数完成成员的初始化工作 eg: Counter c1; 编译系统为对象c1的每个数据成员(m_value)分配内存空间,并调用构造函数Counter( )自动地初始化对象c1的m_value值设置为0 故: 构造函数的作用:初始化对象的数据成员。 二、 构造函数的种类 class Complex { private : double m_real; double m_imag; public : // 无参数构造函数 // 如果创建一个类你没有写任何构造函数,则系统会自动生成默认的无参构造函数,函数为空,什么都不做 // 只要你写了一个下面的某一种构造函数,系统就不会再自动生成这样一个默认的构造函数

const int *p 与 int const* p 和const int const *p区别

醉酒当歌 提交于 2020-01-12 03:22:04
const int * p 与 int const* p 和const int const * p区别 一、何为const const修饰的数据类型是指常类型,常类型的变量或对象的值是不能被更新的。也就是说const常量,具有不可变性。 例如: const int Max=100; Max++; //操作错误 二、 指针常量与常量指针 1、指针常量 指针就是内存单元的地址,所谓指针常量,也就是这个指针变量的值不可改变,即指针只能唯一的指向一个地址,这个地址所对应的内存单元中的内容可以被修改 int* const p = &a; //指针常量 eg: //如果不想要看到错误信息的话,注释掉#define CONFIG_DEBUG这句 #define CONFIG_DEBUG int a, b; int * const p = &a; // 定义了一个只能指向a的地址的指针 *p = 666; //操作成功 #ifdef CONFIG_DEBUG p = &b; //操作失败,指向的地址不可更改 #endif 2、常量指针 顾名思义,常量指针就是指向常量的指针,只要你想让你指向的内存单元中的内容具有像常量那样的不可变性,就可以用常量指针去指向它,相比指针常量,常量指针可以指向任何类型的变量的地址。 就像给小屋(内存单元)里的东西(内容)贴了封条,屋门上上了一把锁,即便是用钥匙打开了屋门