1.常量指针 定义:具有只能够读取内存中数据,却不能够修改内存中数据的属性的指针,称为指向常量的指针,简称常量指针. 声明:const int * p; int const * p; 注:可以将一个常量的地址赋值给一个对应类型的常量指针,因为常量指针不能够通过指针修改内粗数据.只能防止通过指针引用修改内存中的数据,并不保护指针所指向的对象. 2.指针常量 定义:指针常量是指指针所指向的位置不能改变,即指针本身是一个常量,但是指针所指向的内容可以改变. 声明:int * const p=&a; 注…
#include <stdio.h> /* 指针常量 和常量指针 指向常量的指针常量 */ int main() { int a = 100; int b =200; int* const p1 = &a; int const* p2 = &a; *p1 =400;//正确 //p1 = &b; //错误:指针常量 不内改变他的地址 //*p2 = 300; //错误:常量指针不能改变单元中的值 p2 = &b; //正确 return 0; } 总结: 常量指…
搞不懂不吃晚饭 (1)指针常量 指针常量是一个常量,但是是指针修饰的. 格式:int * const p; 例如 int a, b; int * const p = &a;//指针常量 //分为以下两种操作 *p = 9;//操作成功 p = &b;//操作错误,指针p将一直指向a,不能再指向b 因为声明了指针常量,p代表一个指针地址,因此指针变量不允许被修改,但是指针所指向的值即*p是可以修改的.如同次指针指向一个地址,该地址不能被修改,但是地址里的内容可以被修改. (2)常量指针 如果…
命题1. 在C++ 中 const T a 与 T const a 是一样的, 表示a是一个T类型的常量. 测试: 一. 形参定义为引用类型的常量 在函数传参时,形参若定义为 const T& x ,则表示实参是一个引用类型,并且无法在这个函数中更改x的值.由命题1知,它等价于 T const& x . 在不同的书中可能会有不同的写法: 测试:   二.指向常量的指针与指针类型的常量 指向常量的指针定义为 const T *p , 表示 p是指向常量的指针,p也可以指向变量,但是通过p只能…
一.指针的指针    指针的指针看上去有些令人费解.它们的声明有两个星号.例如:        char ** cp;    如果有三个星号,那就是指针的指针的指针,四个星号就是指针的指针的指针的指针,依次类推.当你熟悉了简单的例子以后,就可以应付复杂的情况了.当然,实际程序中,一般也只用到  二级指针,三个星号不常见,更别说四个星号了.    指针的指针需要用到指针的地址.        char c='A';        char *p=&c;        char **cp=&p…
// // Cat.h // OC3-父类指针指向子类对象 // // Created by qianfeng on 15/6/17. // Copyright (c) 2015年 qianfeng. All rights reserved. // #import "Animal.h" @interface Cat : Animal { float _height; } @property (assign,nonatomic)float height; @end // // Cat.m…
基类指针引用派生类对象 用基类指针引用一个派生类对象,由于派生类对象也是基类的对象,所以这种引用是安全的; 但是只能引用基类成员. 若试图通过基类指针引用那些只在派生类中才有的成员,编译器会报告语法错误. (解决该问题的答案是虚函数和多态性??? 这个说法不正确吧) 派生类指针引用基类的对象 用派生类指针引用基类的对象. 这种引用方式会导致语法错误. 派生类指针必须先强制转换为基类指针,这种方法是不安全的. 而在侯捷的<深入浅出MFC>中"第二章C++重要性质"中: 如果你…
我们希望某个对象(内存空间)不被修改的通常做法是什么?声明该空间的const类型,但是这样真的可以吗?是不是的,由于const空间对象的指针是可以付给一个非const值指针的.所以这仍然无法不让该空间被修改. const int a=10; int * b=&a; 虽然,编译器会报警告" 警告:初始化丢弃了指针目标类型的限定",这个意思是,b失去了对目标对象的const的限定.但是通过,并且,可以通过指针b更改它们共同指向的空间. const int a=10; int b=(…
我们在程序中定义了一个基类,该基类有n个子类,为了方便,我们经常定义一个基类的指针数组,数组中的每一项指向都指向一个子类,那么在程序中我们如何判断这些基类指针是指向哪个子类呢? 本文提供了两种方法 (1) 自定义类id, (2)typeid 一.自定义id 如下所示基类father有两个子类son1 和 son2,我们在基类中定义类虚函数id,子类中分别重载了该函数,各个子类返回值都不同 class father { public: virtual void fun() { cout<<&qu…
class A {public:A() { printf("A \n"); }~A() { printf(" ~A \n"); } // 这里不管写不写virtual,删除B对象的时候,都会被执行.因为这个例子是B*指针指向B对象,不是A*指针指向B对象.}; class B : public A{public:B() { printf("B \n"); }~B() { printf("~B \n"); }}; int mai…
举例:x指向的内存地址,其字节内容从低到高依次分别为c1,c2,c3,c4(Delphi读取一个integer的时候,结果是c4c3c2c1,其排列规则是"高高低低"),那么结果是c4,c3,c2,c1(Delphi读取一个integer的时候,结果是c1c2c3c4) 用delphi写的程序,把x指针指向的4个字节次序颠倒过来: function toulong(x: pchar): longword; begin result := (longword(x^) ) or (long…
切片 切片(slice)是对数组一个连续片段的引用(该数组我们称之为相关数组,通常是匿名的),所以切片是一个引用类型(因此更类似于 C/C++ 中的数组类型,或者 Python 中的 list 类型). 切片是一个 长度可变的数组. 多个切片如果表示同一个数组的片段,它们可以共享数据:因此一个切片和相关数组的其他切片是共享存储的,相反,不同的数组总是代表不同的存储.数组实际上是切片的构建块. 优点 因为切片是引用,所以它们不需要使用额外的内存并且比使用数组更有效率,所以在 Go 代码中 切片比数…
我认为是这样,类的成员函数都在代码区,不同的类的成员函数在代码区有自己的类名称空间限制,类的虚函数在虚函数表中,程序执行的时候,是先在虚函数表中找该成员函数,如果没有找到,就去该类在代码区的成员函数中去找. 所以如果父类的成员函数加上virtual时,访问的时候是先在虚函数表中查找,如果找到了,就执行,没找到就再在该类的代码区查找.所以父类普通的成员函数只能在父类的代码区找到. 也就是说通过父类指针找普通成员函数时,虽然父类指针指向子类对象,通过父类指针只能访问子类对象的数据成员(部分,父类独有…
之前发过一次微博,今天又遇到这个问题,并且再次犯错,于是决定再加深一下. 就举php.net里的一个例子吧 $a = array('abe','ben','cam'); foreach ($a as $k=>&$n){ $n = strtoupper($n); } print_r($a); foreach ($a as $k=>$n){ // notice NO reference here! echo "$n\n"; } print_r($a); 输出的结果是:…
#include <stdio.h> int main(void){ void *p; int a = 14322; char c ='A'; p = &a; //p = &c; //强制类型转换(int*)p 把变量指针p强制转换成指向int类型的指针 printf("a=%d\n",*(int*)p); p = &c; printf("c=%c\n",*(int*)p); return 0; }…
1 题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 2 思路和方法 考察链表的遍历知识,和对链表中添加节点细节的考察. 同时也考察了对于复杂问题的划分为多个子问题的能力,复杂问题划分为子问题来做. 其中实现代表next域,即1->2->3->4为最常见的链表形式.而虚线则代表了特殊指针,可以指向任意节点(包括自身…
[问题描述] setTimetout/setInterval中this指针指向window,以下是一个小demo: var demoChange = { key: true, changeFun() { console.log('调用函数'): this.key = true; }, init() { setInterval(function () { if (this.key) { // 此处会报出this.key is undefined 的错误 this.key = false; this…
class A {public: A() { printf("A \n"); } ~A() { printf(" ~A \n"); } // 这里不管写不写virtual,删除B对象的时候,都会被执行.因为这个例子是B*指针指向B对象,不是A*指针指向B对象.}; class B : public A{public: B() { printf("B \n"); } ~B() { printf("~B \n"); }}; int…
1.父类指针可以指向子类对象 静态联翩:如果以父类指针指向派生类对象,那么经由该指针只能访问父类定义的函数 动态联编:根据指针实际指向的对象类型确定 2.面试宝典 P110 面试题5  #include<iostream> #include<string> #include<vector> using namespace std; class B { private: int data; public: B() { cout<<"default c…
//函数fun功能:用函数指针指向要调用的函数,并进行调用. #include <stdio.h> double f1(double x) { return x*x; } double f2(double x, double y) { return x*y; } double fun(double a, double b) { /**********found**********/ double (*f)();//定义一个指针函数. double r1, r2; /**********foun…
基类指针指向派生类,我们已经很熟了.假如我们想用派生类反过来指向基类,就需要有两个要求:1)马克-to-win:基类指针开始时指向派生类,2)我们还需要清清楚楚的转型一下. if you want to use derived class pointerpoint to base class, there are two requirements:1) base class pointer is initially the type of the derived class like Anima…
在学习单片机的时候,经常需要让一个指针指向固定的区域,这时候应该怎么操作? #include<stdio.h> int main() { int *p; int a =10; p=&a; printf("改变前变量a的地址=%p\n",&a); p=(int *)0x000000000061FE33; printf("改变后p指向的地址=ox%p\n",p); printf("变量a的地址=ox%p\n",&a…
今日下午研究了一下c语言中的指针问题,c语言的核心是指针,指针的核心是地址,地址的核心是内存. #include <stdio.h> void hanshu(int *arry,int size,int *m,int *n) { *m=arry[]; *n=arry[]; ;i<size;i++) { if(arry[i]>*m) *m=arry[i]; if(arry[i]<*n) *n=arry[i]; } } int main(int argc, const char…
函数指针的返回值是指针数组,数组里放的是int 函数指针的返回值是指针数组,数组里放的是int指针 #include <stdio.h> #include <stdlib.h> void fun(int a){ printf("fun:%d\n", a); } void fun1(void (*f)(int),int a){ f(a); } int gun(int a){ printf("gun:%d\n", a); } int gun1(i…
// //  main.c //  Pointer_search // //  Created by ma c on 15/8/2. //  要求:通过指针查找,实现比较两个有序数组中的元素,输出两个数组中的第一个相同的元素值. #include <stdio.h> int *searchSameElement(int *a,int *b,int len1,int len2); int main(int argc, const char * argv[]) { int a[] = {5,11,…
不同平台下int类型.指针类型的数据大小 对于int类型数据和指针类型数据的大小,是非常基础的问题. 在一个具体的平台上,确定他们最好的办法就是使用sizeof(type)对其进行判断,返回当前数据类型的大小. 在不同的平台下,int类型和指针类型的数据类型大小时怎样的呢?如果要给出一个统一的答案,自然不可能集齐每个平台,一个个地去试,我们必须从底层进行分析. 数据总线和地址总线 计算机内的数据总线是CPU与外设进行数据交换的通路,而地址总线则是CPU用于寻址的通路. 数据总线的位数决定了CPU…
子类的对象内存布局包括两部分:父类和子类派生部分,所以执行父类的构造函数只不过是在构造子类对象的父类部分.因此子类对象的this指针是指向子类对象自己.…
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> int main11() { system("pause"); ; } void main22() { char *p1 = NULL; p1 = 0x00077; strcpy(p1, "); system("pause"); return ;…
前言 理解javascript的指针就需要先了解js的执行环境和作用域!执行环境的定义了变量或函数有权访问的其他数据,决定了它们各自的行为.每个执行环境都有一个与之关联的变量对象,环境中定义的所有的变量和函数都保存在这个对象中.虽然我们编写的代码无法访问这个对象,但解析器在处理数据时会在后台使用它. 1.全局执行环境 全局执行环境是最外围的一个执行环境,根据js实现的宿主环境的不同,表示执行环境的对象也不一样.在web浏览器中认为window就是全局执行的对象.因此所有的全局变量和函数都是作为w…
不废话,请看代码演示如下: 注意使用的操作系统的位数,不同位数的操作系统,结果不一样! 我是用的是64位的操作系统! linux下示例代码如下: #include <stdio.h> int main() { ; int *a; a = &b; printf("b = %d\n", b); //int型变量b的值. printf("sizeof(b) = %ld\n", sizeof(b)); //int型变量b的值所占用内存空间的大小,单位是字…