首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

指针与二维数组解决方案

2012-03-09 
指针与二维数组我想要得到二维数组元素的地址,写成下面这样是可以的。#include stdio.hint main(){int a[

指针与二维数组
我想要得到二维数组元素的地址,写成下面这样是可以的。
#include <stdio.h>

int main()
{
  int a[2][2] = {1, 2, 3, 4};
  int *p;
  for (p = a[0]; p < a[0]+4; p++) {
  printf("%0x,%d\n", p, *p);
  }

  return 0;
}
但是,当把“ for (p = a[0]; p < a[0]+4; p++)”写成“ for (p = a; p < a+4; p++)”,就会提示“initialization from incompatible pointer type”。
p = a与p = a[0],不都是取二维数组的首地址嘛?为什么会出现这个错误呢?

[解决办法]
int *p是一维,要用二维应该定义是int **p;
[解决办法]
使用二维指针时,你需要小心,二维指针有以下几种情况:
一维连续,二维不连续;
一维不连续,二维连续;
一维不连续,二维连续;
一维连续,二维连续,最后这种是最好处理的一种。
[解决办法]

探讨
我想要得到二维数组元素的地址,写成下面这样是可以的。
#include <stdio.h>

int main()
{
int a[2][2] = {1, 2, 3, 4};
int *p;
for (p = a[0]; p < a[0]+4; p++) {
printf("%0x,%d\n", p, ……

[解决办法]
C/C++ code
//在堆中开辟一个4×5的二维int数组#include <stdio.h>#include <malloc.h>int **p;int i,j;void main() {    p=(int **)malloc(4*sizeof(int *));    if (NULL==p) return;    for (i=0;i<4;i++) {        p[i]=(int *)malloc(5*sizeof(int));        if (NULL==p[i]) return;    }    for (i=0;i<4;i++) {        for (j=0;j<5;j++) {            p[i][j]=i*5+j;        }    }    for (i=0;i<4;i++) {        for (j=0;j<5;j++) {            printf(" %2d",p[i][j]);        }        printf("\n");    }    for (i=0;i<4;i++) {        free(p[i]);    }    free(p);}//  0  1  2  3  4//  5  6  7  8  9// 10 11 12 13 14// 15 16 17 18 19
[解决办法]
a[0]指向的是一个拥有两个int类型元素的数组,而p指向的是int类型的变量,两个虽然都是指针,但是指向的对象类型不同。
可以看下《C缺陷与陷阱》3.1指针与数组

热点排行