c - 使用指向 int 的指针作为数组索引

标签 c arrays pointers indexing char

<分区>

我有以下代码,它是一个更大程序的一部分。我正在尝试将一个 int 传递给一个函数,该函数会将 char 数组 ( name[100] ) 的一部分复制到另一个直到到达某个字符,然后更新 int 值。

#include <stdio.h>

void time_loop(int *a, char name[100], char *data, char until_char)
{
    int c = 0;    
    while(name[*a] != until_char)
    {
        data[c] = name[*a];
        a++;
        c++;
    }
    a = a +  2;
}

int main()
{
    int i = 3;
    char name[100] = {' ', ' ', ' ', 'f', 'o', 'o', ':', '\0'};
    char fill_this[15];

    time_loop(&i, name, fill_this, ':');
    printf("current char index: %d\n", i);
    printf("the word is: %s", fill_this);

    return 0;
}

目前代码运行直到它命中:

while(name[*a] != until_char)

一段代码,访问 *a 时出现问题。

我总是可以采取简单的方法,将函数更改为:

int time_loop(int a, char name[100], char *data, char until_char)

并返回一个 int,但必须有一种方法可以正确地做到这一点。

问:将类型 int* 作为数组的索引号传递的正确方法是什么?

最佳答案

在某些情况下,您不是在修改整数,而是在修改指向它的指针。例如:

a++
a = a + 2

两者都进行指针运算 - 它们修改指针,而不是指针指向的值。你想要的是:

(*a)++
*a += 2

这些对值本身而不是指针执行修改。


请注意,由于您没有进行边界检查,因此您可以遍历数组的末尾(如果您要搜索的字符不在数组中),这是未定义的行为。您还应该确保以 null 终止输出字符串 - 在最后一个字符后添加 \0。如果您尝试打印字符串,不这样做可能会在以后导致未定义的行为。

关于c - 使用指向 int 的指针作为数组索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47317112/

相关文章:

c - c 指针字符串的问题

JavaScript,获取变量中的 url 正文

php - "Notice: Undefined variable"、 "Notice: Undefined index"、 "Warning: Undefined array key"和 "Notice: Undefined offset"使用 PHP

c++ - 表访问性能

Python C-API 访问字符串常量

c - 宏 hell : Platform-independent pointer to setjmp/sigsetjmp

javascript - 从深度未知的嵌套数组中删除项目

c - 在程序中用变量初始化 IP 和 PORT

c - 带有数组的指针函数

c++ - 如何使用方法指针作为另一个方法的参数?