将typdef结构作为参数传递给函数

时间:2017-01-06 18:07:27

标签: c function struct typedef

当我运行此代码时出现此错误: [错误]下标值既不是数组也不是指针也不是矢量

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*Defined a data type named User with typedef*/
typedef struct User{
    char firstName[50];
    char lastName[50];
    int phonenumber; 
}user;


int main(int argc, char *argv[]) {

    user users[2];/*users defined "user" type*/

    strcpy(users[0].firstName,"furkan");

    strcpy(users[1].lastName,"xxxx");

    users[0].phonenumber = 1;

    users[1].phonenumber = 2 ;

    print_users(users);

    return 0;
}

/*Function for printing user type users values*/
void print_users(user usr)
{
    int j=0;

    for(j=0;j<10;j++)
    {
        printf("%-10s%-20s%7d\n",usr[j].firstName,usr[j].lastName,usr[j].phonenumber);
    }
}

我可以在没有typedef的情况下创建此函数,但我想知道是否有办法实现这一目标

2 个答案:

答案 0 :(得分:1)

void print_users(user *usr)

这应该是你的函数接收的参数,因为在你的函数内部你可以使用usr [j],这意味着usr需要是一个指针,而不是一个结构本身。

啊,只是说,你从0到9(10个职位),你唯一分配的2个职位。

答案 1 :(得分:1)

功能参数

void print_users(user usr);
                 ^^^^^^^

是一个标量对象。您可能不会为标量对象应用下标运算符。

如果你想要函数处理数组,那么你应该至少声明函数

void print_users(user usr[]);
                 ^^^^^^^^^^

考虑到不清楚为什么该函数使用幻数10。

for(j=0;j<10;j++)
        ^^^^^

同时在main中声明了一个只包含两个元素的数组

user users[2];

因此,正确声明像

这样的函数
void print_users(user usr[], size_t n );

并在循环中使用变量n

for(j=0;j < n;j++)
        ^^^^^

相应地,该函数可以像

一样调用
print_users( users, 2 );
相关问题