答: 是首地址,是数组的首地址,虽然值等于第一个元素的地址,但是不代表元素的地址.
1. 数组名都是地址常量,都是首地址,可以直接付给指针,但是一维数组和二维数组名 赋予指针时有点不一样.
2.数组名不是指针,它仅仅是个 地址常量
3. 一维数组的数组名 直接付给指针, 如 int a[3]; int *p=a;
4. 二维数组名 直接赋给指针 就错了... 如 int a[3][4]; int *p =a; 就是错误的; int *p = a[0] ; 就对了.
5. 二维数组 对应的是二维数组的指针, 这样定义: int (*p) [4] ; p=a 就对了
#include <iostream>
#include <string>
using namespace std;
void main()
{
int a[3][4]={
{1,2,3,4},
{5,6,7,8},
{9,10,11,12}
};
int * p ;
// p=a ; 错误
p =a[0]; // ok
for(int i=0;i<12;i++)
cout<<*(p+i)<<"--------"<<p+i<<endl;
cout<<a<<endl; // a 与a[0]地址是一样的.
cout<<a[0]<<endl;
}
为什么 p=a 是错的.?