https://blog.csdn.net/yesyes120/article/details/78919149
1、数组名+1,是增加数组元素对应的数据类型的字节数;
数组名地址+1,是增加数组大小的字节数; //例如5个int*4;
2、指针+1,是增加指针类型对应的字节数;
指针地址+1,是增加8(64位),或者4(32位)
1 #include<iostream> 2 #include<string.h> 3 using namespace std; 4 int main() 5 { 6 int x=5,*p_int=&x; 7 int aa[10]={1,2,3,4,5,6,7,8,9,10}; 8 9 cout<<" aa: "<<aa<<" aa+1: "<<aa+1; 10 cout<<" &aa: "<<&aa<<" &aa+1: "<<&aa+1<<" "; 11 12 cout<<" p_int: "<<p_int<<" p_int+1:"<<p_int+1; 13 cout<<" &p_int: "<<&p_int<<" &p_int+1:"<<&p_int+1; 14 15 return 0; 16 }
1 int array[5]={1,2,3,4,5}; 2 cout<<*(*(&array+1)-1); 3 4 =5
*(*(&array+1)-1)里,
&array是取array的地址;
&array+1就是在array的地址的基础上向前跑4*5个字节;
*(&array+1)就是在数组末尾再往后一个字节的地址;
*(&array+1)-1就是数组末尾的地址;
*(*(&array+1)-1)就是数组末尾的那个元素。
这里&array+1结果与*(&array+1)结果一样!!!???
3、数组指针 & 指针数组
https://www.cnblogs.com/jianfeijiang/p/5914398.html
//a) 一个整型数( An integer) int a; //b) 一个指向整型数的指针( A pointer to an integer) int *b; //c) 一个指向指针的的指针,它指向的指针是指向一个整型数( A pointer to a pointer to an integer) int **c; //d) 一个有 10 个整型数的数组( An array of 10 integers) int d[10]; //e) 一个有 10 个指针的数组,该指针是指向一个整型数的( An array of 10 pointers to integers) int *e[10] //f) 一个指向有 10 个整型数数组的指针( A pointer to an array of 10 integers) int (*f)[10]; //g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数( A pointer to a functionthat takes an integer as an argument and returns an integer) int *g(int); //h) 一个有 10 个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers to functions that take an integer argument and return an integer int (*h[10])(int);
int a[10]={}中&a的类型与int (*a)[10]中b的类型一致;typeid(a).name( )均是 int (*) [10];