2017-05-30 152 views
2

我猜的东西基本上是错误的,我想送这个全球:将数组字符串传递到函数指针?

static char content[MAX_NUM_WORDS][MAX_WORD_LEN]; 

作为参数传递给一个函数指针,函数指针DEF:

void(*flashReadDelegate)(char*[])=0; 

,并调用它:

//save some data in (which prints ok) 
strcpy(content[record_desc.record_id],toSave); 

// ***Send the delegate out 
(*flashReadDelegate)(content); // ** here there is a compiler warnning about the argument 

那么如果我想发送content指针参数应该如何?

回答

5

void(*flashReadDelegate)(char*[])=0;是错误的。你的函数指针应该是这样的

void (*flashReadDelegate)(char (*)[MAX_WORD_LEN]); 

你还没有提到flashReadDelegate所指向的函数原型。我假设它的原型是

void func(char (*)[MAX_WORD_LEN]); 

现在,在函数调用(*flashReadDelegate)(content);,参数数组content将被转换为一个指向MAX_WORD_LENchar S((*)[MAX_WORD_LEN])阵列。

+0

非常感谢!那么,为什么我的arg错了?它不是一个指向字符串的指针吗? – Curnelious

+2

@Curnelious;作为函数参数'char * []'等效于'char **'。 – haccks

+0

'char * []'减少为指向字符数组第一个元素的指针,其中char(*)[MAX_WORD_LEN]'减少为指向字符数组的指针,每个数组元素的MAX_WORD_LEN字符宽 – Zakir

1

您的content声明不是指向字符串的指针。它是MAX_WORD_LEN个字符的MAX_NUM_WORDS字符串的一个数组。

如果你想要一个阵列你就需要声明content为字符串:静态字符*内容[MAX_NUM_WORDS]`