在C中以单独函数打印数组

在C中以单独函数打印数组,c,arrays,function,C,Arrays,Function,我试图通过将四个数组中的值发送到一个单独的函数来打印它们。但是,问题是我无法让函数打印数组中的所有整数,因为我不确定我可以在for循环中将condition语句设置为什么,这对于任何大小的数组都是通用的 现在该函数只打印前11个数字。我想这是因为数组中的第一个数字是11 #include <stdio.h> void print_array(int a[]); void find_max(int b[]); void find_min(int c[]);

我试图通过将四个数组中的值发送到一个单独的函数来打印它们。但是,问题是我无法让函数打印数组中的所有整数,因为我不确定我可以在
for
循环中将condition语句设置为什么,这对于任何大小的数组都是通用的

现在该函数只打印前11个数字。我想这是因为数组中的第一个数字是11

#include <stdio.h> void print_array(int a[]); void find_max(int b[]); void find_min(int c[]); void search(int d[]); void SORT(int e[]); int main(void) { int first[11] = {7,7,7,7,7,7,7,7,7,7,7}; int second[14] = {11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2}; int third[16] = {-2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}; int fourth[23] = {-3, 4, 33, 22, 9, -100, 2, 56, 57, 55, 2, 90, 2234, 32, 8, 123, 2, 33, 22, 22, 33, -1, -3}; print_array(&second[0]); return(0); } void print_array(int a[]) { int i; for(i=0;i<*a;i++) { printf("%d ",a[i]); } } #包括 无效打印_数组(int a[]); void find_max(int b[]); void find_min(int c[]); 无效搜索(int d[]); 无效排序(int e[]); 内部主(空) { int first[11]={7,7,7,7,7,7,7,7,7,7}; int second[14]={11,10,9,8,7,6,5,4,3,2,1,0,-1,-2}; int third[16]={-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13}; int-fourth[23]={-3,4,33,22,9,-100,2,56,57,55,2,90,2234,32,8,123,2,33,22,22,33,-1,-3}; 打印数组(&秒[0]); 返回(0); } 无效打印_数组(int a[]) { int i;
对于(i=0;i向函数传递第二个参数,该参数采用数组的长度。例如:

print_array(int *array, int length)
{
    for (int i = 0; i < length; i++) { /* whatever */ }
}
print_数组(int*数组,int长度)
{
对于(int i=0;i
函数无法知道数组何时结束。除非手动传递,否则这段数据根本不存在。数组只是内存中的一个字节序列,没有结束分隔符。因此,应该向函数添加一个参数,告诉它数组的长度


是的,这就是它在C中的工作方式。

将函数更改为:

void print_array(int a[], size_t a_size) {
    int i;
    for(i=0; i< a_size;i++)
    // ...

它将计算数组的内存大小(对于32位系统上的4 int数组,它将是16)并除以int的大小(对于32位系统,它是4字节)。

在C中,您可以使用函数和宏进行设置:

void printArray_(int *a, int len) {
    for (int i = 0; i < len; i++) printf("%d ", a[i]);
}

#define printArray(arr) printArray_((arr), sizeof(arr)/sizeof(arr[0]))

int main(int argc, _TCHAR* argv[])
{   
    int data[] = { 1,2,3,4 };
    printArray(data);
    return 0;
}
换行

print_array(&second[0]);

因为, &第二个[0]只是将引用传递给第0个位置的元素,该元素将无法遍历数组

如果没有大小,我们无法遍历通过引用传递的数组。由于存在大小不同的数组,我们可以通过

             int array_length = sizeof(array)/sizeof(array[0]);
换线

void print_array(int a[])

阵列打印的功能如下:

void print_array(int *a,int array_length){
    int i;
    for(i=0;i<array_length;i++){
        printf("%d ",*a);
        a++;          //for incrementing the position of array.
    }
}
void打印数组(int*a,int数组长度){
int i;

对于(i=0;i是否可以将数组方括号[]中的值赋给变量?@Mike确切地说,您应该以某种方式让程序知道此值,例如,将其赋给变量。如果您在接收指向char参数指针的函数中调用此值,它将失败,因为
sizeof(arr)
调用将返回
sizeof(char*)
,原因是。
             int array_length = sizeof(array)/sizeof(array[0]);
void print_array(int a[])
void print_array(int *a,int array_length)
void print_array(int *a,int array_length){
    int i;
    for(i=0;i<array_length;i++){
        printf("%d ",*a);
        a++;          //for incrementing the position of array.
    }
}