c - C 中获取数组元素的指针

标签 c pointers

Possible Duplicate:
pointer arithmetic in C for getting a string

我是 C 新手,我想用函数获取数组的元素,我尝试了不同的选项,但我仍然没有得到元素。 我的职能是:

void getelements(int *a, int cl)
{
    int *p;
    for (p=&a[0];p<&a[cl];p++)
    {
         printf("%d\n",*p);
    }
}

我知道解决方案应该像这样工作,但它只打印第一个元素,然后打印内存位置。我正在调用我的函数:

int v={10,12,20,34,45};
   getelements(&v,5);

有什么帮助吗?我需要使用指针算术。 谢谢

最佳答案

首先,不要在问题未解决时更新代码来修复错误。它使当前的大多数答案变得毫无意义,不会因为解决了先前代码中的一个或多个问题的人而给予认可,并且使寻找与自己相关的问题的临时读者完全困惑通过其中的问题和答案。如果您想修改更新,除了原始问题外,还可以这样做,但如果这是一个完全不同的问题,则标记为已回答,在应有的地方给予认可,然后向您提出一个新问题新代码和不同的问题(无论如何,理想情况下)。

正如现在所写,你的功能很好。但你真正的问题是:

// compile with -Wall -Werror and look at the warning here
int v={10,12,20,34,45}; // <== WRONG
getelements(&v,5);      // <== Harmless, but bad form.

这应该是这样的,假设您想打印数组中的所有元素:

int v[] = {10,12,20,34,45};
getelements(v, sizeof(v)/sizeof(v[0]));

注意数组后面的[]。如果没有它,&v 就会掩盖编译器发出的大警告或错误,即 int 正在作为 int * 传递>。此外,如果您编译之前的代码时将完整警告视为错误(对于 gcc,为 -Wall -Werror),您将在 v 声明行中收到如下错误:

main.c:116:15: Excess elements in scalar initializer

换句话说,第一个元素之后的所有内容都被忽略,因此您的指针正在进入未定义的行为区域。将声明和调用更改为上面的内容将解决此问题,并确保您不会再犯该错误,因为 sizeof(v[0]) 甚至不会编译 除非 v 是数组或指针类型。当您使用指针而不是数组进行此类计算时,后者仍然会引起头痛,但您必须在 C 中约束自己不要这样做。

关于c - C 中获取数组元素的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13853034/

相关文章:

c - 这个循环如何结束?

c - 全局变量是否比 C 中的局部变量快?

c++ - 删除间接指针是否正确

c++ - 自动创建对象,如何控制/增加名称?

更改函数中传递的指针

c - 主函数之外的 printf 抛出错误

c - 无法将 C 代码链接到 Objective C : Undefined symbols for architecture arm64

C 和 libgcrypt。 Str 输入 gcry_error_t。然后加

c - 警告 : passing argument 1 of makes integer from pointer without a cast [enabled by default]

c++ - 正确初始化指针映射 - map<p*, p*>