我尝试创建一个无符号字符数组,并创建一个指向数组第一个位置的指针,但我一直收到一个错误。以下是我的代码和错误:
void initBuffer { unsigned char buffer[size]; unsigned char *ptr; ptr = &buffer; }
我怀疑这是一个非常简单的类型错误,因为我是C新手,不知道如何修复它。
ddrv8njm1#
&buffer的类型为unsigned char (*)[size]。ptr的类型为unsigned char *。这两种类型是 * 不 * 一样的。就像编译器告诉你的那样。假设你想让ptr指向buffer的第一个元素,那么你需要使用&buffer[0],它有正确的类型,这就是普通的buffer会 * 衰减 * 到的:
&buffer
unsigned char (*)[size]
ptr
unsigned char *
buffer
&buffer[0]
ptr = buffer;
clj7thdc2#
我对您提供的代码做了一个小改动,ptr = &buffer[0];
#include <stdio.h> int main() { unsigned char buffer[] = {'A','B','C','D'}; unsigned char *ptr; ptr = &buffer[0]; // ptr, points to first element of array for(int i=0; i<4; i++) printf("%c", ptr[i]); return 0; }
2条答案
按热度按时间ddrv8njm1#
&buffer
的类型为unsigned char (*)[size]
。ptr
的类型为unsigned char *
。这两种类型是 * 不 * 一样的。就像编译器告诉你的那样。
假设你想让
ptr
指向buffer
的第一个元素,那么你需要使用&buffer[0]
,它有正确的类型,这就是普通的buffer
会 * 衰减 * 到的:clj7thdc2#
我对您提供的代码做了一个小改动,ptr = &buffer[0];