指针变量+1和-1:
指针变量加1后,其增加的值是该指针所指向的数据类型的字节数。
int a;
int *p=&a;
cout<<p<<endl<<p+1<<endl;
输出的结果是:0x61ff18
0x61ff1c
因为int的字节是4。不一定是这两个值,但它们的差应该都是4。数组名也是如此。可以修改指针变量的值,不能修改数组名,因为数组名是常量。数组地址:
数组名代表数组的首地址,即第一个元素的地址。但对数组名取地址时,不会被解释为其地址。
int a[10];
cout<<a<<endl;
cout<<&a<<endl;
cout<<a+1<<endl;
cout<<&a+1<<endl;
从数值上看,a+1与&a+1相同。但从概念上看,a即(&a[0])是一个4字节内存块的地址,而&a是一个40字节内存块的地址。因此a+1是将地址加上4,而&a+1是将地址加上40。数组名和指针变量的区别:
当一个数组名赋值给相同类型的变时,可以对这两者用数组表示法或指针表示法来访问元素。但对它们分别使用sizeof时,得到的值是不同的,尽管它们的值相同。
int a[10];
int *p=a;
cout<<sizeof(a)<<endl<<sizeof(p)<<endl;
sizeof(a)得到是40,而sizeof(p)得到是4。即sizeof(a)得到的整个数组空间的大小,而sizeof(p)得到的只是该指针变量指向的某个基本数据类型的大小。