C程序增加传递的数组的每个元素

时间:2016-11-02 20:23:42

标签: c arrays pointers

C新手。
我正在尝试编写一个包含函数的程序,该函数接收一个数组指针,并且在main函数中传递的数组的每个元素都递增1.这是我试过的:

#include <stdio.h>
#include <stdint.h>

void array_incr(int8_t *, uint8_t);

int main (void){
    int8_t *arr[] = {0xAB, 0xCB, 0xC4, 0x84};
    array_incr(arr, sizeof(arr)/sizeof(arr[0]);
    int i;
    for (i = 0; i < 4; i++)
        printf("%d", arr[i]);
}

void array_incr(int8_t *arr, uint8_t len){
    int i;
    for(i=0; i<len; i++)
        arr[i]++;

}

这是编译时出现的大量警告和错误。有人可以告诉我哪里出错了,同时保持相同的实施形式?

2 个答案:

答案 0 :(得分:1)

确实存在多个问题:

  • 声明int8_t *arr[] = {0xAB, 0xCB, 0xC4, 0x84};中的类型不正确:您应该删除*,因为arr是一个数字数组,而不是一个指针数组。此外,值大于127,这是类型int8_t的最大值,您应该使用uint8_t或更大的类型。

  • )

  • 末尾遗失array_incr(arr, sizeof(arr)/sizeof(arr[0]);
  • \n输出语句中没有printf("%d", arr[i]);。这些值将以一个数字序列(和负号)出现,因为int8_t类型的值实际上是负数。)

以下是更正后的版本:

#include <stdio.h>
#include <stdint.h>

void array_incr(uint8_t *, uint8_t);

int main(void) {
    uint8_t arr[] = { 0xAB, 0xCB, 0xC4, 0x84 };
    array_incr(arr, sizeof(arr) / sizeof(arr[0]));
    int i;
    for (i = 0; i < 4; i++)
        printf("%d\n", arr[i]);
}

void array_incr(uint8_t *arr, uint8_t len) {
    int i;
    for (i = 0; i < len; i++)
        arr[i]++;
}

答案 1 :(得分:-2)

首先,最好包括所谓的警告和错误列表,但是如此小的程序,它大部分都是正常的。

对此事,你宣布你的阵列错了;它应该是int8_t arr[](你包括一个额外的*)。你想要一个整数数组,不是指向整数数组的指针,也不是指向整数的指针数组(你无论如何都不能初始化前者)。

sizeof并不像你认为的那样工作。它返回变量或类型在内存中占用的字节数。例如,在大多数现代系统sizeof(int)上返回4,就像int a = 1; sizeof(a)一样,就像sizeof(arr)一样。 arr不是数组,它是指向数组的指针,因此它在技术上是一个int(因此是4个字节)。您必须创建一个额外的变量并手动保持数组的大小(如果要更改)。

编辑:尝试过,似乎工作。我记得它没有,但显然它确实......