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]++;
}
这是编译时出现的大量警告和错误。有人可以告诉我哪里出错了,同时保持相同的实施形式?
答案 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个字节)。您必须创建一个额外的变量并手动保持数组的大小(如果要更改)。