还是数组和指针的问题
int a[2][2],**ptr;
a[2][2]=3;
ptr=(int**)a;
cout < <*((*ptr+1)+1) < <endl; //这个不就是a[2][2]吗?怎么指不到值
[解决办法]
int a[2][2],**ptr;
a[2][2]=3; //这句就错了,越界……
a[0][0] a[0][1] a[1][0] a[1][1] 就这么4个……
你的指针指向正确,确实是数组的最后一个,但是…………你没给它赋值呢,你的赋值跑别的地方去了…………
[解决办法]
运行了一下,结果是1414
[解决办法]
a[2][2]=3改成:a[1][1]=3;
[解决办法]
C/C++中数组是从0开始的
你把数组中的2都改成1就对了
出了第一个定义的那个外
[解决办法]
先看以下程序:
#include <stdio.h>
void main()
{
int a[2][2]={1,2,3,4},**ptr;
ptr=(int**)a;
printf( "0x%p,0x%p,0x%d\n ",ptr,ptr+1,*(ptr+1));//结果为:0x0012FF70,0x0012FF74,2
//printf( "%d ",*(*(ptr+1)+1)); //这个语句有问题,运行出错
}
说明虽然进行了强制类型转换,ptr还是一个一维指针。
再看以下程序:
#include <stdio.h>
void main()
{
int a[2][2]={1,2,3,4},(*ptr)[2];
ptr=a;
printf( "0x%p,0x%p\n ",ptr,ptr+1); //运行结果为0x0012FF70,0x0012FF78
printf( "%d\n ",*(*(ptr+1)+1)); //运行结果为4
}
只有这样声明,ptr才表示一格指向二维数组的指针,(*ptr)[2]中的2表示数组每一行元素的个数。
[解决办法]
楼上的正确
[解决办法]
(*(ptr+1)+1))怎么就指向了4了呢?那就是说它等同于a[1][1]咯 ??ptr+1指向3,那2呢?2的指针是什么?
高手~~请给我这只小菜鸟讲详细点可以吗?
[解决办法]
*ptr=a[0][0]; *(ptr+1)=a[0][1];
*((ptr+1)+1)=a[1][0]; *((ptr+1)+2)=a[1][1];
[解决办法]
楼主可以看看C专家编程的数组与指针那章...
网上很多电子版