先看题:
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
typedef unsigned char BYTE;
int _tmain(int argc, _TCHAR* argv[])
{
int a[10];
int *p = a;
printf("%d, %d\n", (int*)(a+1)-p, (int*)(&a+1)-p);
return 0;
}
运行结果:
1,10
解析:
数组名等价于指向a[0]的指针,为指向数组元素类型的指针,+1偏移一个数组元素;数组名取地址后,为指向该数组类型的数组指针,+1会偏移整个数组长度。&a相当于是二维数组的首行地址。