如何使指针指向2D数组的任意元素?

12

直截了当地说,

我希望字符指针p指向唯一包含字符'T'的数组元素。

char a[100][100];
char *p;

for(int i=0;i<4;i++)
  for(int j=0;j<4;j++)
    if(a[i][j] == 'T')
      p = a[i][j];

附注:我尝试了各种组合的***等,但似乎都不起作用。


4
a[i][j]char 类型,因此 &a[i][j] 是更简单的方式,记得 [] 的优先级高于 &,所以不需要加上 ()。你需要其他技巧吗?还是有其他问题? - Grijesh Chauhan
1
我尝试了各种组合的 ***,应该尝试一些 & 的组合。 ;) - Christian Rau
3个回答

17

使用其地址:

char a[100][100];
char *p;

for(int i=0;i<4;i++)
  for(int j=0;j<4;j++)
    if(a[i][j] == 'T')
      p = &a[i][j];

a[i][j]char类型的,而pchar *类型,它持有一个地址。要获取变量的地址,请在其前面加上&

指针上的*运算符反过来。如果您想要得到'T',可以使用:

 char theT = *p;

7

还有另一种获取它的方法。

char a[100][100];
char *p;

for(int i=0;i<4;i++)
   for(int j=0;j<4;j++)
       if(a[i][j] == 'T')
           p = a[i]+j;

通过编写 p = a[i]+j; 你实际上是在说,我们有一个指针位于名为 a[i] 的数组的开头,并且你指向距离该数组开头 j 倍的位置!

-1

将 if 部分更改如下

  if(a[i][j] == 'T' ) {
       p = (char *) &a[i][j];
       i = 4; break;
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接