64,691
社区成员
发帖
与我相关
我的任务
分享
不一样,虽然指向的地址确实一样!
*a+1//这就是第0行移动一个元素,也就是a[0][1]
*(a+1)//折就是第一行第0个元素!移动一行!!
a是行指针,+1就是移动一行
*a是元素指针,+1就是移动一个元素
#include <iostream>
using std::cout;
using std::endl;
int main(void)
{
int a[3][3] = {1,2,3,4,5,6};
int n = sizeof(int);
n = sizeof(a[1]);
cout<<"a:"<<a<<" "<<"a+1:"<<a+1<<" "<<"a[1]+1:"<<a[1]+1<<endl;
cout<<"*a[1]:"<<*a[1]<<" "<<"*a:"<<*a<<" "<<"&a[1][1]:"<<&a[1][1]<<" "<<"&a[1]:"<<&a[1]<<endl;
cout <<endl<<endl;
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
cout<<"&a["<<i<<"]["<<j<<"]:"<<&a[i][j]<<" ";
cout<<endl;
}
getchar();
return 0;
}
char a[2][2]={'m','n','p','q'};
a//指向首地址,如果cout<<*a,那么就是从a的首地址输出,*a是一个地址!
a+1//指向p那个元素的地址,如果cout<<*(a+1),就是从p开始输出
*a//指向第0行地址
----------------------------------------
上面都是指向的地址
----------------------------------------
a[1]+1//指向a[1][1]元素
a[1]//可以看做是a[1]+0,指向a[1][0]
*a+1//这就是第0行移动一个元素,也就是a[0][1]
*(a+1)//折就是第一行第0个元素!移动一行!!
------------------------------
上面都是指向的元素
------------------------------
后面几个取地址就不用说了!
int main()
{
char a[10][20];
printf("%ld\n",(long)a);
printf("%ld\n",(long)(a+1));
printf("%ld\n",(long)(a[1]+1));
printf("%ld\n",(long)(&a[1][1]));
printf("%ld\n",(long)(&a[1]));
}
1244856
1244876 //a+1 的结果,说明是首地址增加了一个第二维的长度 20
1244877
1244877
1244876
Press any key to continue
晕,不是有人问过了么?
char a[10][20],
a,数组指针,指向第一个元素!
a+1,数组指针,指向第一行元素的第0个元素
a[1]+1, 指向第一行第一个元素
*a[1], 先于[1]结合,a[1]指向第第一行第0个元素,*可以拿到第一行第0个元素的值
*a, 第0行第0个元素
&a[1][1], 第一行第一个元素的值
&a[1]。//第一行的首地址,也就是a[1][0]的地址@