Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在c中循环和打印结构数组?_C_Arrays_Function_Loops - Fatal编程技术网

如何在c中循环和打印结构数组?

如何在c中循环和打印结构数组?,c,arrays,function,loops,C,Arrays,Function,Loops,我正在编写一个独立于main的函数,该函数读入一个结构数组并打印每个数组元素的结构元素。然而,我的问题是循环通过这个数组来打印每个元素的条件语句。sizeof(a)/sizeof(a[])在函数中不起作用,因为它在原型中等于零。我有什么遗漏吗?我尝试过指针算法,但它也不起作用 void printNames( person a[]){ int i; for(i = 0;i<sizeof(a)/sizeof(a[0]);i++) printf("Name:

我正在编写一个独立于main的函数,该函数读入一个结构数组并打印每个数组元素的结构元素。然而,我的问题是循环通过这个数组来打印每个元素的条件语句。sizeof(a)/sizeof(a[])在函数中不起作用,因为它在原型中等于零。我有什么遗漏吗?我尝试过指针算法,但它也不起作用

void printNames( person a[]){

    int i;

    for(i = 0;i<sizeof(a)/sizeof(a[0]);i++)
        printf("Name: %s | Age: %d\n", a[i].name, a[i].age);

}

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

    if (argc == 1 || argc%2 == 0){
        printf("Invalid arguments.\n Usage: %s name1 age1 name2 age2 ...", argv[0]);
        return 0;
    }

    printf("You have entered %d person(s) into the program.\n", argc/2);
    person people[argc/2];

    int i;

    for (i = 0; i<argc/2;i++){
        strcpy(people[i].name, argv[i*2+1]);
        people[i].age = atoi(argv[i*2+2]);

    if(people[i].age <= 0){
        printf("Invalid age <= 0. Try again.");
        return 0;
    }


}
void打印名(人员a[]{
int i;

对于(i=0;i
当作为参数传递给函数时,a
将成为指针,因此它无法仅从该指针计算出数组的大小,您必须通知函数其大小:

void printNames(person *a, size_t num)
{
    int i;
    for (i = 0; i < num; i++)
        printf("Name: %s | Age: %d\n", a[i].name, a[i].age);
}

在C语言中,数组参数被衰减成指针。因此,表达式
sizeof(a)/sizeof(a[0])
变成
sizeof(int*)/sizeof(int)
,结果是1(假设
int
int*
的大小为4),因此
printNames()中的
循环的
只执行一次,与数组大小无关

因此,在这些情况下,
sizeof
不应用于获取元素数。相反,我们可以将数组大小的附加参数传递给
printNames()

考虑以下C程序:

#include<stdio.h>
void func(int array[])  
{
  int i;   
  int arraySize = sizeof(array)/sizeof(array[0]); /* arraySize <-- 1<-- 4/4 */
  for (i = 0; i < arraySize; i++) 
  {  
    array[i] = i; 
  }
}

int main()
{
  int i;  
  int array[4] = {0, 0 ,0, 0};
  func(array);

  for(i = 0; i < sizeof(arr)/sizeof(arr[0]); i++)
    printf(" %d " ,arr[i]);

  getchar();  
  return 0;
}    
#包括
void func(整型数组[])
{
int i;

int arraySize=sizeof(array)/sizeof(array[0]);/*arraySize显示最小的代码。数组作为参数传递时会衰减为指针,因此
sizeof(a)
是指向
a
的指针的大小,而不是数组的大小。您需要显式传递数组的长度。除了rpattiso所说的以外,请注意,您不能使用
人名[argc/2]在C中声明数组
因为
argc
是一个变量。在编译时大小未知的数组必须用
malloc()
分配。宏
sizeof()
也是在编译时运行的。如果您无法计算动态分配数组的大小,您必须以其他方式跟踪数组大小。@Havenard
person-people[argc/2]
是VLA。VLA可以从C99开始使用。sizeof也不是宏。sizeof也适用于VLA(在运行时)。@Flower:
sizeof(myarray)/sizeof(myarray[0])
对于原始数组(这里是“people”)来说是一件非常合适的事情。如果您将长度取在printNames()之外,那么like就好了。但是,正如Tryin正确指出的那样,“数组引用衰减为printNames()内部的指针”。一个常见的解决方案是添加一个“int length”printNames的参数,例如:
printNames(people,sizeof(people)/sizeof(people[0]);
#include<stdio.h>
void func(int array[])  
{
  int i;   
  int arraySize = sizeof(array)/sizeof(array[0]); /* arraySize <-- 1<-- 4/4 */
  for (i = 0; i < arraySize; i++) 
  {  
    array[i] = i; 
  }
}

int main()
{
  int i;  
  int array[4] = {0, 0 ,0, 0};
  func(array);

  for(i = 0; i < sizeof(arr)/sizeof(arr[0]); i++)
    printf(" %d " ,arr[i]);

  getchar();  
  return 0;
}    
#include<stdio.h>
void func(int array[], size_t arraySize)  
{
  int i;   
  for (i = 0; i < arraySize; i++) 
  {  
    array[i] = i;  
  }
}

int main()
{
  int i;  
  int array[4] = {0, 0 ,0, 0};
  func(array, 4);

  for(i = 0; i < sizeof(array)/sizeof(array[0]); i++)
    printf(" %d ", array[i]);

  getchar();  
  return 0;
}