数组&指针

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<<"\naa:\t"<<aa<<"\naa+1:\t"<<aa+1;
10     cout<<"\n&aa:\t"<<&aa<<"\n&aa+1:\t"<<&aa+1<<"\n\n";
11     
12     cout<<"\np_int:\t"<<p_int<<"\np_int+1:"<<p_int+1;
13     cout<<"\n&p_int:\t"<<&p_int<<"\n&p_int+1:"<<&p_int+1;
14     
15     return 0;
16 }
View Code
1 int array[5]={1,2,3,4,5};
2 cout<<*(*(&array+1)-1);
3 
4 =5
View Code

*(*(&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];

 

posted @ 2019-04-10 18:42  kuaqi  阅读(248)  评论(0编辑  收藏  举报