C++数组和指针加减法和sizeof问题
关于指针和加减法:
指针的加减法:指针的加减法,加多少或者减多少,主要是看所指对象的sizeof值。
例子:
double m = 3.0;
int n = ;
double *p=&m;
int* p1=&n; printf("p:%d\n", p );
printf("P+1:%d\n", p+);
printf("P1:%d\n", p1);
printf("P1+1:%d\n", p1+);

如上图所示,p加了8,因为指向是double类型。p1加了4,因为指向了int。
现在我定义一个数组,int a[3]={0};看一下a+1和&a+1到底加了多少:
int p[] = { };
printf("p:%d\n", p);
printf("P+1:%d\n", p + );
printf("&p:%d\n", &p);
printf("&p+1:%d\n", &p+);

p+1加了4,&p+1加了12。
此时p指向的是数组的第一个元素,而&p指向的一个大小为3的int数组。因此p+1加的是一个int的大小,而&p+1加的是一个int[3]数组的大小12。
关于类型和sizeof:
虽然如此,但是p的类型是数组,&p的类型是指针。而sizeof的值主要是根据变量类型判断的。
int (*p1)[]=&p;
p1和&p的类型都是指向int [3]的指针,而p的类型就是一个int[3]的数组。PS:数组在作为参数的时候退化为一个指针。

而sizeof主要是根据变量的类型,因此指针大小自然为4,p的大小是12。

C++数组和指针加减法和sizeof问题的更多相关文章
- C语言数组和指针的理解_在取地址运算上的操作_指针加减操作_a 和&a 的区别
1.一个实例+理论分析 在了解数组和指针的访问方式前提下,下面再看这个例子: main() { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); pr ...
- C语言中的指针加减偏移量
C语言指针偏移技巧(也是一个要注意的坑) - 陈杰柱的博客 - CSDN博客 https://blog.csdn.net/cjzjolly/article/details/82116772 C语言中 ...
- C之指针加减运算
法则:1.指针减指针,语法正确,结果得一个整型值,表示两数值之间的对象类型的空间距离,而不是对象之间的字节数差值 2.指针加指针,语法错误, 3.指针加整形值,语法正确,表示后移N个空间单位 ...
- 二维树状数组的区间加减及查询 tyvj 1716 上帝造题的七分钟
详细解释见小结.http://blog.csdn.net/zmx354/article/details/31740985 #include <algorithm> #include < ...
- sizeof 数组与指针
在学习指针的时候,得到指针的定义和数组的定义一样,但是这时候就很好奇,指针只是一个地址,那数组和指针一样的话,sizeof时怎么得知其长度呢. 于是百度了下面的回复: 千万不要把数组名看成指针,尽管有 ...
- void *指针的加减运算
1.手工写了一个程序验证void *指针加减运算移动几个字节: //本程序验证空类型指针减1移动几个字节 #include <stdio.h> int main(int argc, cha ...
- 深入理解C/C++数组和指针
C语言中数组和指针是一种很特别的关系,首先本质上肯定是不同的,本文从各个角度论述数组和指针. 一.数组与指针的关系数组和指针是两种不同的类型,数组具有确定数量的元素,而指针只是一个标量值.数组可以在某 ...
- 深入理解 C/C++ 数组和指针
本文转载自CSDN@WalkingInTheWind,原文链接:https://blog.csdn.net/luckyxiaoqiang/article/details/7044380 C语言中数组和 ...
- C语言中指针的加减运算
参考文章,值得一看 char arr[3]; printf("arr:\n%d\n%d\n%d\n", arr, arr + 1, arr + 2); char *parr[3]; ...
随机推荐
- tomcat 修改为自己项目界面
修改Tomcat欢迎界面为自己项目界面 Posted on 2011-04-16 13:10 IceWee 阅读(1062) 评论(0) 编辑 收藏 所属分类: Tomcat 由于项目要发布到互 ...
- Eclipse 修改 创建的Jsp的默认格式
Eclipse 的jsp模板修改 打开 eclipse 选择 Window -- Preferences
- Python Django之路与您同行
大家好,我是TT,互联网测试行业多年,没有牛逼的背景,也没有什么可炫耀的,唯独比他人更努力,在职场打拼.遇到过的坑,走过的弯路,愿意与大家分享,分享自己的经验,少走弯路.首发于个人公众号[测试架构师] ...
- Wiser的Junit测试用法
package org.jbpm.process.workitem.email; import static org.junit.Assert.assertEquals; import static ...
- log4go的精确定时程序(带自动延迟补偿)
程序设计目标是在程序启动10秒后执行某个任务,例如日志转储(rotate),以后每隔15秒执行一次. 初次的设计 package main import ( "time" &quo ...
- Java之StringBuffer,StringBuilder,Math,Date,SimpleDateFormat,UUID,File
java.lang 类 StringBuffer java.lang.Object java.lang.StringBuffer 所有已实现的接口: Serializable, Appendable, ...
- 【转载】Android 开发 命名规范
原文地址:http://www.cnblogs.com/ycxyyzw/p/4103284.html 标识符命名法标识符命名法最要有四种: 1 驼峰(Camel)命名法:又称小驼峰命名法,除首单词外, ...
- 【NOIP模拟】roads(最短路径转最小生成树)
题目背景 SOURCE:NOIP2016-RZZ-1 题目描述 有 N 个城市,这些城市通过 M 条无向边互相连通,每条边有一个权值 Ci ,表示这条边的长度为 2^(Ci) ,没有两条边的长度是相同 ...
- 可存放任意类型变量的动态数组--C语言实现
之前在训练营的时候被要求用C语言实现一个可以存放任意类型数据的栈.现在尝试实现一个数组版本. 首先用到的结构体如下(接触了Win32编程所以长得有点像里面的那些类型): typedef struct ...
- 解决div里面img的缝隙问题(转)
图片IMG与容器下边界之间有空隙怎么办?这里介绍3中简单的解决方法. 第一,给图片img标签display:block. img{display:block} 第二,定义容器里的字体大小为0. div ...