当前位置:  开发笔记 > 人工智能 > 正文

如何使用指针在数组中显示字符串?

如何解决《如何使用指针在数组中显示字符串?》经验,为你挑选了1个好方法。

我正在练习使用指针.

我有一个指向3个字符串数组的指针:"dog","cat","rat".

我可以使用for循环和使用数组打印内容.

但是,我在使用指针算法打印它们时遇到问题.我想将指针递增到数组中的下一个元素.然而,它所做的只是打印狗牌.

码:

int main(int argc, char **argv)
{
    char *str[3] = { "DOG", "CAT", "RAT"};
    int i = 0;

    /* display using an array element */
    for(i = 0; i < 3; i++)
    {
    printf("str: %s\n", str[i]);
    }

    /* display using a pointer arthimatic */
    while((*str)++)
    {
    printf("str: %s\n", str);
    }

    getchar();

    return 0;
}

我怎么能做到这一点?

编辑:

码:

while(str)
{
    printf("str: %s\n", *(str++));
}

但是,我收到此错误消息.I值是否必须是某种变量?

错误C2105:'++'需要l值



1> Johannes Sch..:

你首先必须得到一个指针,你需要一个什么时候停止.可以使用最后一个NULL指针.所以代码变成了

char *str[] = { "DOG", "CAT", "RAT", NULL };
char **elem_p = str;

/* display using a pointer arthimatic */
while(*elem_p) {
    printf("str: %s\n", *elem_p);
    elem_p++;
}

你所做的是增加存储在数组的第一个元素中的指针.该指针永远不会太快等于空指针(如果有的话),所以,循环不会停止,直到指针的内部值溢出或其他事情发生,以便它等于空指针.然后,您将指向数组的第一个元素printf传递给(您传递数组,但编译器会将其转换为指针 - 请参阅下文).Printf将这些指针的字节解释为字符并打印它们,如果它不立即崩溃,将导致打印出垃圾.

您希望在更高级别递增:增加数组的一个元素(指针),但指向元素本身的指针.现在,你做不到

str++

因为str是一个数组.它不是指针,即使它可以转换为指针,然后指针指向它的第一个元素.因此,我们创建一个指向str[0]最初的指针,但再次增加它.请注意,我们在打印后递增它,以便我们也打印出第一个元素.

实际上,我想我应该解释为什么你做不到str++.好吧,str是一个数组.数组是占用一定数量存储空间的对象.在上面,数组占用char指针大小的4倍4 * sizeof(char*).乍一看看起来像指针的是同一类型的元素块.对于寻址元素,编译器可以在表达式中组成一个数组中的指针,然后可以用它来寻址数组中的元素.如果这样做str++,编译器将为您创建一个指针.但是这个指针是暂时的,只是暂时存在,其目的只是为了立即对它做一些事情,但它不能像增加一样改变.这就是我们创建一个真正的指针变量然后可以递增的原因.

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有