关于二维数组和二维指针的相关问题
2009-03-26 14:04
232 查看
问题:
#include <stdio.h>
int main(void){
int **p;
int arr[10]; //suppose the address of the arr[10] is 0x1200;
int i;
for(i=0;i <10;i++)
{
arr[i] = (int)arr + i;
}
p = &arr;
p[8][3] = 12;
for(i=0;i <10;i++)
{
printf("%x,",arr[i]);
}
return 0;
}
1、错误在于p = &arr;改为p=(int**)arr或者p=(int**)&arr , vs2003下编译通过。
这个是一维数组名赋给二维指针错误,其实二维数组名赋给二维指针一样需要强转。如下:
二维数组名不能简单理解成二维的指针,int a[4][5]; a是二维数组的首地址,但它不是一个int **型的指针。int **p = a;这样赋值是错误的,用指针对二维数组的操作应该参考用指针数组(int * p[4])或者或者行指针((int *)p[4])的方式。
2、关于p[8][3] = 12;
p[8][3] --> *(*(p+8)+3) -->*(1208 +3) 因为这种形式,括号外是*,所以括号里面变成地址相加,步长就是数组成员的长度,整形占4个字节,所以变为->*1220 ->此即是arr[5];所以最后结果是
1200,1201,1202,1203,1204,12,1206,1207,1208,1209
#include <stdio.h>
int main(void){
int **p;
int arr[10]; //suppose the address of the arr[10] is 0x1200;
int i;
for(i=0;i <10;i++)
{
arr[i] = (int)arr + i;
}
p = &arr;
p[8][3] = 12;
for(i=0;i <10;i++)
{
printf("%x,",arr[i]);
}
return 0;
}
1、错误在于p = &arr;改为p=(int**)arr或者p=(int**)&arr , vs2003下编译通过。
这个是一维数组名赋给二维指针错误,其实二维数组名赋给二维指针一样需要强转。如下:
二维数组名不能简单理解成二维的指针,int a[4][5]; a是二维数组的首地址,但它不是一个int **型的指针。int **p = a;这样赋值是错误的,用指针对二维数组的操作应该参考用指针数组(int * p[4])或者或者行指针((int *)p[4])的方式。
2、关于p[8][3] = 12;
p[8][3] --> *(*(p+8)+3) -->*(1208 +3) 因为这种形式,括号外是*,所以括号里面变成地址相加,步长就是数组成员的长度,整形占4个字节,所以变为->*1220 ->此即是arr[5];所以最后结果是
1200,1201,1202,1203,1204,12,1206,1207,1208,1209
相关文章推荐
- 二维指针,二维数组,以及指向数组的指针的相关问题 .
- 二维指针,二维数组,以及指向数组的指针的相关问题
- 二维指针,二维数组,以及指向数组的指针的相关问题
- 关于二维数组地址和指针之间赋值的问题
- 关于二维数组首地址赋予指针的问题
- 关于C/C++中二维数组、指针的引用等若干问题的总结
- 关于一维和二维数组名是指针的问题
- 关于二维数组和二维指针的理解总结
- 关于C语言字符数组、字符串和指针的相关问题
- 一维指针和二维指针指向二维数组的一些问题
- 一个关于二维指针的问题
- 关于用指针方式访问二维数组的问题
- 关于C++中类的成员函数指针相关问题
- 关于二维数组与二维指针传递参数
- 二维数组和二维指针的传递问题
- C语言中关于指针,二维数组等的问题,一个有趣的发现
- 关于二维数组名和指针的指针的问题
- C中的关于指针的优先问题
- 关于messagebroker/amf的相关问题
- 关于前端传值的相关问题续