C++Review11_指针数组和数组指针

首先明确一些基本概念:

=  等于号两边的数据类型要一致,如果不一致需要显式或者隐式的类型转换;

变量作为右值时,编译器只是取变量的值。

运算符的优先级:()>[]>*

接下来看:

int *p1[10];    表示是一个数组p1,[]的优先级比*高。元素是指针的数组,指针数组;

int (*p2)[10];  表示的是一个指针,[]告诉我们这是指向数组的指针。数组中的元素有10个,元素类型int,数组指针。
  ->私下可以这么理解 int (*)[10] p2; int (*)[10]是指针类型, p2是指针变量;

地址强制转换

struct Test{

  int Num;

  char *pcName;

  short sData;

  char cha[2];

  short sBa[4];

}*p;

假设p的值为0x100000;

p+0x1= 0x100000+size(Test)*0x1;                                                                 //结构体大小为20byte,所以p+0x1 = 0x100014。

(unsigned long)p + 0x1 = 0x100001;                                                              //因为p已经变成无符号长整型,所以就直接相加即可。

(unsigned int*)p+0x1 =  0x100000+sizeof(unsigned int )*0x1 =  0x100004;  //unsigned int有4byte大小。

原文地址:https://www.cnblogs.com/grooovvve/p/12362714.html