2017-04-27 203 views
0

所以我试图将一个char数组传递给一个函数并打印出来然后返回数组。将字符串数组传递给使用指针的函数

以下是我的主要功能。我正在做二进制搜索树但是我只是坚持传递一个字符数组。

int main() 
{ 
    BST tree = new_bst(); 
    int noRecords; 
    int tfn; 
    char name[10]; 
    char *test; 

    FILE *fileptr; 
    fileptr = fopen("welfare1.txt", "r"); 
    fscanf(fileptr, "%d", &noRecords); 
    fscanf(fileptr, "%s", name); 
    fscanf(fileptr, "%d", &tfn); 

    insert_bst(&tree, tfn, &name); 
} 

到目前为止,这里是插入BST函数。我还没有实现它,因为我无法将名称字段传递给我的函数,我使用printf作为测试来查看它是否工作。

BSTNodePtr insert_bst_node(BSTNodePtr self, int n, char *name) 
{ 

    if (self == NULL) 
    { 
     TaxRecordPtr newRecord = new_record(); 


     self = malloc(sizeof *self); 
     self->data = newRecord; 
     self->left = self->right = NULL; 

     printf("%c", name[0]); 
} 
+0

....问题是....? – LPs

+1

'&name'不是'char *'!但简单的'名称'衰减到一个... – aschepler

+0

数组只通过引用传递,只需'insert_bst(&tree,tfn,name);'''和'BSTNodePtr insert_bst_node(BSTNodePtr self,int n,char name [])'应该为你工作 –

回答

-1

char数组相当于指向char的指针。 所以引用字符数组时,所需的类型将是一个双字符指针

BSTNodePtr insert_bst_node(BSTNodePtr self, int n, char **name) 

无论如何,有没有点传递一个指向字符数组,你可以只通过该字符数组本身

insert_bst(&tree, tfn, name); 

您不会按值传递char数组,因为数组相当于一个指针。

+0

'name'和'&name'的衰减类型都不是'char **'。 – aschepler

+0

'&name'是一个指向数组的指针,而不是指向字符指针的指针。 **数组和指针是不同的动物**甚至数组可以*衰减*指针... –

0

变化

insert_bst(&tree, tfn, &name); 

insert_bst(&tree, tfn, name); 

除了当它是sizeof或一元&运营商的操作数,或是使用在声明初始化字符阵列,一个字符串文字“T”类型的“N元素数组”的表达式将被转换(“衰减”)为类型“指向T的指针”的表达式,并且表达式的值将是第一个元素的地址o数组。

当调用

insert_bst(&tree, tfn, name); 

表达name不是sizeof或一元&运营商的操作数,因此它“衰变”键入char *,其中相匹配的参数的类型在函数定义。

当你调用

insert_bst(&tree, tfn, &name); 

表达name一元&操作者的操作,因此转换不会发生;相反,表达式的类型是char (*)[10],或者“指向10元素数组的char”,它与函数定义中参数的类型不匹配。