C++中指针运算】的更多相关文章

1,指针可以和数字运算,指针+-整数,如, int num[] = {1,2,3,4,5,6,7,8}; int *p = num; p++; p--; p = p + 3; p = p -3; 数字大小是数字*指针所指向类型的大小: 2,指针与指针减法运算,指针—指针,如: int num[] = {1,2,3,4,5,6,7,8}; int *p = num; int *q = &num[4]; 则 q - p = 4: 又比如:在int数组中,指针p为2004,指针q为2024,则q -…
二维数组在概念上是二维的,有行和列,但在内存中所有的数组元素都是连续排列的,它们之间没有"缝隙".以下面的二维数组 nums 为例: 从概念上理解,nums 的分布像一个矩阵,但在内存中,a 的分布是一维线性的,整个数组占用一块连续的内存: 1 int nums[2][3] = { 10,20,30,40,50,60 }; 2 //以上定义与下边相同 3 int nums[2][3] = { {10,20,30}, {40,50,60} }; 在几乎所有的程序语言中,二维数组都是按行排…
指针值加1就是将指针值加上sizeof(指针所指变量的类型) 1+1=2,那么指针加1是加上了1这个数字吗?试一下,在代码中定义了char数组,char也是整数,数组名是ac,ac中有10个元素,0-9,然后做了一个char *p=ac,定义了*p的一个指针,p指向了ac数组的第一个单元.然后分别输出p和p+1的值,结果是差了1: #include <stdio.h> int main(void){ ,,,,,,,,,}; char *p = ac; printf("p =%p\n&…
(7)指针运算 在前几篇文章中,我们已经见过指针运算的使用场景,并多次使用指针运算来进行验证. 这里我们来特别地总结下.指针运算的本质含义. 在c语言中.如果p.pa.pb都是某种类型的指针,这种运算被称为指针运算(算术运算): ,前提:pa和pb类型同样. 其本质是 1.. 2..得到的是逻辑存储单元数.而不是简单的物理字节数. 代码验证 int main(void) { int array[] = {1, 2, 3}; int *pa = array; int *pb = array + 3…
浅谈C++中指针和引用的区别 浅谈C++中指针和引用的区别   指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法. 1.指针和引用的定义和性质区别: (1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元:而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已.如: int a=1;int *p=&a; int a=1;int &b=a; 上面定义了一个整形变量和一个指针变量p,该指针变量指…
该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教. 指针运算有很多种,主要有指针的声明*.指针的解引*.指针指向(*).或->.指针+.指针-.指针==.指针!=.指针>.指针>=.指针<.指针<=.指针转换(数据类型). 通过代码: #include <stdio.h> int main(int argc, char **argv) { char charVar; short shortVar; in…
C语言数组与指针的那些事儿 在C语言中,要说到哪一部分最难搞,首当其冲就是指针,指针永远是个让人又爱又恨的东西,用好了可以事半功倍,用不好,就会有改不完的bug和通不完的宵.但是程序员一般都有一种迷之自信,总认为自己是天选之人,明知山有虎,偏向虎山行,直到最后用C的人都要被指针虐一遍. 指针 首先,明确一个概念,指针是什么,一旦提到这个老生常谈且富有争议性的话题,那真是1000个人有1000种看法. 在国内的很多教材中,给出的定义一般就是"指针就是地址",从初步理解指针的角度来说,这种…
uintptr 和 unsafe普及 uintptr 在Go的源码中uintptr的定义如下: /* uintptr is an integer type that is large enough to hold the bit pattern of any pointer. 从英文注释可以看出 uintptr是一个整形,它的大小能够容纳任何指针的位模式,它是无符号的,最大值为:18446744073709551615,怎么来的,int64最大值 * 2 +1 */ type uintptr u…
最近在看cocos2d-x,于是打算复习一下C++,在这里简单对比下,留个念想. 先看看oc中指针的用法 @interface ViewController : UIViewController { int value1; } @property (nonatomic) int value2; @end @implementation ViewController @synthesize value2; - (void)viewDidLoad { [super viewDidLoad]; //…
本例子来自于<剑指Offer>(P37) 解答如下: size1:20 data1是一个数组,sizeof(data1)是求数组大小. 这个数组包含5个整数,每个整数4个字节,共20字节. size2:4 data2声明为指针,尽管它指向了数组data1的第一个数字,但它的本质仍然是一个指针. 在32位系统上,对任意指针求sizeof,得到的结果都是4. size3 : 4 在C/C++中,当数组作为函数的参数进行传递时,数组会自动退化为同类型的指针. 因此尽管函数GetSize的参数data…
C++中指针的使用.以前在使用指针之前都会初始化.今天没有初始化,然后指针传递后没有内容(testptrnoret),后来发现返回指针的话(testptrret),就可以了. // testptr.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" int* testptrret(int* a,int n) { a = new int[n]; for (int i = 0; i < n;i++) { a[i] = i; } return a;…
指针是C语言中比较难的一个内容,Keil C51在指针方面有和标准C不一样的地方,今天看了一些资料学习了一下Keil C51 中指针的使用. keil51的指针,包含两种指针:普通指针,兼容标准C:内存特殊指针 1 普通指针 char * ptr; //指针占3字节,第一字节是标识存储类型,第二字节是存储地址高位字节,第三字节是低位字节 char * xdate ptr; //指针存储在片外,xdate 是修饰ptr的 char * idate ptr; //指针存储在片内,指针指向的数据可以是…
原文:js中位运算的运用 我们可能很少在编程中用位运算,如果没深入学习,可能也很难理解.平时的数值运算,其实是要先转换成二进制再进行运算的,而位运算就是直接进行二进制运算,所以位运算的执行效率肯定是更高的.下面通过一些实例来加深对位运算的理解. 按位与(&) &&运算符我们都知道,只有两个都为真,结果才为真.&道理是一样的,只有两个数的值为1时,才返回1.例如1和3的按位与操作: 0001 & 0011 --------- 0001 只有对应的数为1时,结果才为1,…
在C语言编程中指针经常困扰着我们,但是若能灵活运用指针的话,将会使得我们编程变得更加轻松与高效.这里讲下*p[N], (*P)[N],及**p的区别,这也是之前经常困扰我的地方. 这三者的定义分别为: int  *p[N]表示指针数组,也就是说定义了N个不同指向int型的指针. int (*p)[N]表示定义一个指针,指向一个int[N]型的指针. int **p 表示定义一个指向指针的指针. 注意[]的优先级要高于*. 指针即表示一个存放某种数据类型变量的地址,例如: #include <st…
学习了C语言之后,关于指针部分看了无数遍,有时候明明觉得自己看懂了,指针就是地址,但是总是在看代码时候糊里糊涂的搞不明白,最近又关于指针强化了一把. 大部分情况下对于程序中指针糊涂是因为不明白指针符“*”有两个作用: 第一,作为标识符,定义变量为指针,如int *p://只是说明变量p是指针变量,而没有实际意义. 第二,作为运算符,像+,—,运算符一样,如cout<<*p;//输出指针变量p所指向的内容. 一般在程序中,第一次出现的指针符*,是作为标识符,申明指针变量,之后出现是作为运算符,但…
以前一直有个疑问,指向不同类型的指针到底占用的内存空间是多大呢? 这个问题我多次问过老师,老师的答案是"指向不同类型的指针占据的内存空间大小不同",我一直很之一这个答案,今天我就做了个小小的实验,发现的确老师的答案是错误的.废话不多说,直接上代码: #include<iostream> using namespace std; void main(){double j=5;double &i=j;double *pi=&i;cout<<"…
昨天刚把<C程序设计语言>中"指针与数组"章节读完,最终把心中的疑惑彻底解开了.如今记录下我对指针声明的理解.顺便说下怎样在C语言中创建复杂声明以及读懂复杂声明. 本文章中的内容參考自<C程序设计语言> 指针是什么就不具体说明了,用一句话来总结就是:"指针是一种保存变量地址的变量". 1.声明简单的指针变量 先看看代码: int i = 1; int *p; //声明一个指向int类型数据的指针变量 p p = &i; //&…
友情提示:阅读本文前,请先参考我的之前的文章<从四个属性的角度来理解C语言的指针也许会更好理解>,若已阅读,请继续往下看. 我从4个属性的角度来总结了C语言中的指针概念.对于C语言的一个指针,比如int *p,4个属性分别如下: C语言指针p=(指针自己的值,与星号结合名,有用数据的值,有用数据的类型); 这4个属性用来理解C语言中单个指针可以,那么本篇再用这4个属性来解释C语言中的"指针的指针". C语言中指针的指针,好多教材一般给出的定义是"变量的地址的地址&…
简单运算 现在有有个需求,给定一个数组,让数组中每一个数乘以2,怎么做呢 n = 10 L = [i for i in range(n)] L # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 2 * L # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9] A = [] for e in L: A.append(2*e) A # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] L =…
    c/c++中指针学习的两个绝好例子 对于众多人提出的c/c++中指针难学的问题做个总结: 指针学习不好关键是概念不清造成的,说的简单点就是书没有认真看,指针的学习犹如人在学习饶口令不多看多学多练是不行的,下面是两个很经典的例子,很多书上都有,对于学习的重点在于理解*x和x的理解,他们并不相同,*x所表示的其实就是变量a本身,x表示的是变量a在内存中的地址,如果想明白可以输出观察cout<<*x"|"x;,当定义了int *x;后对x=&a的理解的问题.仔细阅…
原来C#不仅仅支持和C/C++中指针(或者说是引用)很像的委托delegate,还支持在unsafe代码块中使用指针,从而写非托管的代码(人为不让垃圾回收机制来管理相应的内存).在unsafe中就可以使用指针,基本用法和C++差不多(果然是一家人,哈哈). 在用指针调用数组的时候需要使用fixed语句(只能在unsafe语句块中使用)来固定指针变量的初始值,否则可能被垃圾回收机制改变指针变量的值,fixed语句可以禁止垃圾回收机制重定位可移动的变量. fixed语句中可以设置指向托管变量的指针,…
指针是一个变量,其值为另一个变量的地址. 所有指针的值的实际数据类型,不管是整型.浮点型.字符型,还是其他的数据类型,都是一样的,都是一个代表内存地址的长的十六进制数. 下面从4个代码例子分别讲述以下4个知识点: (1) 指针概念 (2) 数组中指针的递增/递减 (3) 指针数组&数组指针 (4) 指向指针的指针 #include <stdio.h> // (1)指针概念 void example1(); // (2)数组中指针的递增/递减 void example2(); // (3…
在C#中,有时候希望通过指针来操作内存,这样可以提高效率.我们可以用unsafe关键字修饰含有指针操作的程序段,如下所示: class Program {   static int Main(string[] args)   { unsafe       {           // ...       }   } } unsafe只是编译器指令语法,只是在编译的时候起作用,并不是说unsafe修饰的程序段是unmanaged,他们仍然是managed的. 在C#里定义指针和C++有些不同: 1…
Java中"指针"的解释以及对"引用"的理解 初学Java面对对象编程,对于一些概念还真的有点难以理解,主要是因为不由自主的联系到以前学过的C语言知识,时不时的影响着自己对Java语言的认识,如今自己对于Java的一些概念解释和理解记录下来,以便于以后回顾: 一.引用: 在Java语言的教材中关于创建对象格式是这样规定的: 类名 引用变量 = new 类名(); 对于这句话的解释是:创建一个对象,将对象的地址赋值给引用变量,此时变量就持有了对象的引用:而此时我们就可…
这里&是取地址运算符,*是间接运算符. &a 的运算结果是一个指针,指针的类型是 a 的类型加个 *,指针所指向的类型是 a 的类型,指针所指向的地址嘛,那就是 a 的地址. *p 的运算结果就五花八门了.总之 *p 的结果是 p 所指向的东西,这个东西有这些特点:它的类型是 p 指向的类型,它所占用的地址是 p 所指向的地址. 用通俗的方法可以这么理解:在声明的过程中,使用 *,来创建指针变量:在运算过程中,& 将变量变成指针.* 将指针变成变量: int a=12; int b…
1.指针变量中存放的是地址值,也就是一个数字地址,例如某指针变量中的值是0x20000000,表示表示此指针变量存放的是内存中位于0x20000000地方的内存地址.指针变量可以加减,但是只能与整型数据加减,此时加减的含义并不是其地址值进行了加减,也就是说如果指针变量p的值是0x20000000,那么p=p+2;的值并不是0x20000002,并不是地址值的简单相加,那么地址值加减多少是与指针指向的数据类型相关联的,如果在32位的操作系统上,p是指向整型数据的指针变量,那么p=p+2之后,p的地…
参考文章,值得一看 char arr[3]; printf("arr:\n%d\n%d\n%d\n", arr, arr + 1, arr + 2); char *parr[3]; printf("parr:\n%d\n%d\n%d\n", parr, parr + 1, parr + 2); 从结果可以看到,字符数组每个元素占1字节,字符指针数组每个占4字节. 再看一个例子: char a = 'a', b = 'b', c = 'c', d = 'd'; cha…
int a[5]={1,2,3 ,4,5} *p=a; *p++ 等价于*(p++) 等价于a[i++](i++ i首先会被使用任何进行自+) *++p等价于*(++p) 等价于 a[++i] (++i  i首先自+然后被引用)…
指向不同类型的指针的区别在于指针类型可以知道编译器解释某个特定地址(指针指向的地址)中的内存内容及大小,而void*指针则只表示一个内存地址,编译器不能通过该指针所指向对象的类型和大小,因此想要通过void*指针操作对象必须进行类型转化.       ★ 相同点:       1. 都是地址的概念:        指针指向一块内存,它的内容是所指内存的地址:        引用是某块内存的别名.       ★ 区别:       1. 指针是一个实体,而引用仅是个别名:     2. 引用使用…
一.初步了解--指针与取地址 先看程序: #include<cstdio> int main(void) { int num = 7; int *p = &num; printf("%d 的地址是 %p\n", num, p); return 0; } 上面int *p定义了一个指向int类型指针p(我们使用*符号把p声明为指针),并初始化p使其指向int类型的变量num,这里&num中的&是取地址操作符,当&作用于一个对象上时,它返回了该对…