检查指针数组中的指针

时间:2014-03-13 18:36:30

标签: c arrays pointers char compare

我刚开始研究C,所以这可能是一个愚蠢的问题,但这里是:

首先,我使用这个标志:-std = c99 -Wall

我有一个char指针数组,称之为arr 我也有一个char指针,称之为X. 我也知道arr中存在多少项(指针),我把这个数字保存在一个名为:Uniq_names

的int中

现在我想知道是否有办法检查ar内是否存在X

我试过这样做:

int i = 0;
while (i < Uniq_names){
    if (X == arr[i]){
        //do something
    }
    i++;
}

但它不起作用,我无法弄清楚原因。

那么为什么不做这项工作呢?我该怎么办呢?

编辑1: 我确实希望代码能够得到评论(在这里我用来打印一个操作),但它从来没有。

我知道一个事实是指向对象的指针确实存在于数组中并指向与指针X指向的对象相同的对象。

假设arr包含一个指向K的指针,我比较的指针X也指向K,所以这两个指针是相同的(不是吗? )但仍然是&#34;内部的代码;如果&#34;声明永远不会运行。

希望这更清楚。

编辑2:

谢谢大家!,当我使用strcmp时问题解决了!

Big thx!

2 个答案:

答案 0 :(得分:2)

如果要测试2个字符串是否相等,可以使用string.h中声明的函数strcmp

if(X == arr[i])更改为

if(strcmp(X, arr[i]) == 0)

答案 1 :(得分:1)

X == arr[i]检查指针(即内存地址)是否相同。如果您正在尝试查看第一个char值是否相同,则需要取消引用两者并比较显式值。在这种情况下,您需要*X == *arr[i]

要比较字符串,您可以使用简单的for循环。

bool matches;
char* X = arr[i];
int j = 0;
while *X!= NULL;{
    if(X[j]==arr[i][j]){
        matches = true;
        j++;
    }
    else{
        matches = false;
        break;
    }

此示例区分大小写。