int a[3];中a+1与&a+1区别 -- C

int a[3];

a 和 &a 的地址一样的。

a+1 == a + 1*sizeof(int);跳跃是一个数组元素大小

&a+1 == a + 3*sizeof(int);跳跃是整个数组大小

#include <stdio.h>

int
main()
{
	char * a[] = {"hello","the","world"};
	char ** pa = a;
	pa ++;

	/*	获取数组中第二个元素 */
	printf("*pa = %s\n",*pa);
	printf("*(a+1) = %s\n",*(a+1));

	int b[] = {1,2,3};
	int * pb = b;

	/*	获取数组中最后一个元素 */
	printf("*((int *)(&b +1)-1) = %d\n",*((int *)(&b +1)-1));
	printf("*((int *)((&b +1)-1) = %d\n",*((int *)((&b +1)-1)));

	printf("*((char **)(&a+1)-1) = %s\n",*((char **)(&a+1)-1));

	/*	地址一样 */
	printf("b = 0x%0X\n",b);
	printf("&b = 0x%0X\n",&b);
}
/*
[[email protected] test_class]# ./a.out
*pa = the
*(a+1) = the
*((int *)(&b +1)-1) = 3
*((int *)((&b +1)-1) = 1
*((char **)(&a+1)-1) = world
b = 0xBFC556B0
&b = 0xBFC556B0
*/

int a[3];中a+1与&a+1区别 -- C

时间: 2024-10-17 11:25:02

int a[3];中a+1与&a+1区别 -- C的相关文章

int类型数组中找出现几次的数的题目总结

1.     题目1:int类型数组中除了一个数出现一次以外,其他数都出现两次,求该数. [分析]全部异或运算即可. 2.     题目2:int类型数组中除了两个数出现一次以外,其他数都出现两次,求这两个数. 参考:http://zhedahht.blog.163.com/blog/static/2541117420071128950682/ [分析]:全部亦或之后得到的数为resultExclusiveOR,找到它的第一个不是0的位,然后将数组按这个位是否为0分成两组,组内全部亦或即可. /

75 int类型数组中除了一个数出现一次或两次以外,其他数都出现三次,求这个数。

[本文链接] http://www.cnblogs.com/hellogiser/p/single-number-of-array-with-other-three-times.html [题目] int类型数组中除了一个数出现一次或两次以外,其他数都出现三次,求这个数. [分析] C++ Code 123456789101112   int singleNumber(int *a, int n) {     int ones = 0, twos = 0;     for (int i = 0;

数组溢界地址的正确使用: 即 int a[6] 中的 a[-1] 和 a[6] 正确使用

正如大家所知道的那样: 数组  int a[6] ,  编译器阅读到这句数组定义,会为分配6个int 类型的地址:a[0]  a[1]   a[2]   a[3]  a[4]  a[5].我们 可以正确的使用这6地址内容来存放数据.而本文想说的是a[0]前一个地址和 a[5] 后一个地址的正确使用. 可能有人会有疑问,这两个地址是非法的,是不允许访问和使用的. 幸运的是,我们并不需要引用这两个元素,而只是引用这两个元素的地址,并且着脸个地址在所有C语言实现中都是存在的.ANSIC C 标准明确允

Struts2中的ActionContext和ServletActionContext的区别和用法

今天学习Struts2的时候遇到"访问和添加属性"的问题,然后就学到了ActionContext和ServletActionContext之间的区别和用法,然后又在网上搜了下别人的文章大致了解了一下,就想着总结一下. 参考文章1:http://www.cnblogs.com/tanglin_boy/archive/2010/01/18/1650871.html 参考文章2:http://blog.csdn.net/woshixuye/article/details/8172777 相信

java中的hashcode和euqals的区别和联系

一.equals方法的作用 1.默认情况(没有覆盖equals方法)下equals方法都是调用Object类的equals方法,而Object的equals方法主要用于判断对象的内存地址引用是不是同一个地址(是不是同一个对象). 2 .要是类中覆盖了equals方法,那么就要根据具体的代码来确定equals方法的作用了,覆盖后一般都是通过对象的内容是否相等来判断对象是否相等. 没有覆盖equals方法代码如下: [java] view plaincopy //学生类 public class S

.NET中的三种Timer的区别和用法(转)

最近正好做一个WEB中定期执行的程序,而.NET中有3个不同的定时器.所以正好研究研究.这3个定时器分别是:  //1.实现按用户定义的时间间隔引发事件的计时器.此计时器最宜用于 Windows 窗体应用程序中,并且必须在窗口中使用.  System.Windows.Forms.Timer  // 2.提供以指定的时间间隔执行方法的机制.无法继承此类.  System.Threading.Timer  //3.在应用程序中生成定期事件.  System.Timers.Timer  这三个定时器位

app包中的fragment和v4包中的fragment的使用的区别

1.错误:The method replace(int, Fragment) in the type FragmentTransaction is not applicable for the arguments (int, MyFragment) http://www.cnblogs.com/1114250779boke/p/3867494.html 其实主要问题是getSupportFragmentManager(),而不是使用getFragmentManager 2.app包中的fragm

JAVA中extends 与implements有啥区别?

JAVA中extends 与implements有啥区别?1. 在类的声明中,通过关键字extends来创建一个类的子类.一个类通过关键字implements声明自己使用一个或者多个接口.extends 是继承某个类, 继承之后可以使用父类的方法, 也可以重写父类的方法; implements 是实现多个接口, 接口的方法一般为空的, 必须重写才能使用2.extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承,JAVA中不支持多重继承,但是可以用接口

SQL Server中临时表与表变量的区别

2009年02月20日 星期五  19:31 我 们在数据库中使用表的时候,经常会遇到两种使用表的方法,分别就是使用临时表及表变量.在实际使用的时候,我们如何灵活的在存储过程中运用它们,虽然它们 实现的功能基本上是一样的,可如何在一个存储过程中有时候去使用临时表而不使用表变量,有时候去使用表变量而不使用临时表呢? 临时表 临时表与永久表相似,只是它的创建是在Tempdb中,它只有在一个数据库连接结束后或者由SQL命令DROP掉,才会消失,否则就会一直存在.临时表在创建的时候都会产生SQL Ser