C 是否可以创建一个函数,其中数组作为一个参数,第二个参数用于保存参数1(数组)的大小?

C 是否可以创建一个函数,其中数组作为一个参数,第二个参数用于保存参数1(数组)的大小?,c,arrays,function,C,Arrays,Function,第一个参数是整数数组,第二个参数是整数,即数组中的元素数。函数不返回值 该函数不打算返回任何内容,因此我必须返回void。我可以很好地创建数组,但是我不确定是否可以创建一个直接影响第一个参数数组大小的整数参数 void printArray(int x[], int arrayCount); 这是有效代码 void打印数组(int x[],int arrayCount) 即使第二个参数最好使用typesize\t来保存第一个参数(数组)元素的数量。这是有效的代码 void打印数组(int x[

第一个参数是整数数组,第二个参数是整数,即数组中的元素数。函数不返回值

该函数不打算返回任何内容,因此我必须返回void。我可以很好地创建数组,但是我不确定是否可以创建一个直接影响第一个参数数组大小的整数参数

void printArray(int x[], int arrayCount);
这是有效代码

void打印数组(int x[],int arrayCount)

即使第二个参数最好使用type
size\t
来保存第一个参数(数组)元素的数量。

这是有效的代码

void打印数组(int x[],int arrayCount)


即使第二个参数最好使用type
size\t
来保存第一个参数(数组)元素的数量。

这是C中的一种常见模式。一个函数将数组(或指针)与“size”参数一起使用

void printArray(int x[], int arrayCount);
printary
的实现中,您实际上并没有创建数组,它已经传递给您:

您可以按如下方式测试代码

 void printArray(int x[], int arrayCount)
 {
      // your code goes here
 }


 int main(int argc, char** argv)
 {
      int testArray1[] = {8,6,7,5,3,0,9};
      int count1 = sizeof(testArray1) / sizeof(testArray1[0]);  // 7

      printArray(testArray1, count1);

      return 0;
 }

这是C语言中的一种常见模式。函数采用数组(或指针)和“size”参数

void printArray(int x[], int arrayCount);
printary
的实现中,您实际上并没有创建数组,它已经传递给您:

您可以按如下方式测试代码

 void printArray(int x[], int arrayCount)
 {
      // your code goes here
 }


 int main(int argc, char** argv)
 {
      int testArray1[] = {8,6,7,5,3,0,9};
      int count1 = sizeof(testArray1) / sizeof(testArray1[0]);  // 7

      printArray(testArray1, count1);

      return 0;
 }
是否可以创建一个函数,其中数组作为一个参数,第二个参数用于保存参数1(数组)的大小

是和否

是的,下面的代码可以。但是不,
x
不是数组。函数参数不能是C中的数组-即使
intx[]
看起来像数组。对于函数参数,
int x[]
int*x
相同
x
是指针-指向
int
的指针

void printArray(int x[], int arrayCount);
这在使用上不是问题。请考虑下面的内容。在许多情况下,数组被转换为数组第一个元素的地址。这里,
fred
被转换为
&fred[0]
作为
printArray()
的第一个参数

printary()
的示例实现打印参数
x
的大小。注意,它是指针的大小

是否可以创建一个函数,其中数组作为一个参数,第二个参数用于保存参数1(数组)的大小

是和否

是的,下面的代码可以。但是不,
x
不是数组。函数参数不能是C中的数组-即使
intx[]
看起来像数组。对于函数参数,
int x[]
int*x
相同
x
是指针-指向
int
的指针

void printArray(int x[], int arrayCount);
这在使用上不是问题。请考虑下面的内容。在许多情况下,数组被转换为数组第一个元素的地址。这里,
fred
被转换为
&fred[0]
作为
printArray()
的第一个参数

printary()
的示例实现打印参数
x
的大小。注意,它是指针的大小



我不知道你为什么不试试。是的,这是有效的代码,这确实是正确的方法。这是完全有效的代码。您可以将这两个参数包装在一个结构中,以便像下面这样一致地传递它们
typedef struct{int*array;size\t size;}my\u int\u array。必须假定size参数与数组的实际大小匹配。没有办法在编译时强制执行它。我不知道你为什么没有尝试过。是的,这是有效的代码,这确实是正确的方法。这是完全有效的代码。您可以将这两个参数包装在一个结构中,以便像下面这样一致地传递它们
typedef struct{int*array;size\t size;}my\u int\u array。必须假定size参数与数组的实际大小匹配。没有办法在编译时强制执行它。
size\u t arrayCount
?因为我已经进入C语言两个月了,那么size\u t arrayCount意味着什么?@artm-正确。最好是尺寸合适。我要离开OP发布的内容,因为那是他发布的内容。我假设他的老师希望他这样编码。
size\u t
只是表示
unsigned int
unsigned long
的另一种方式。由于数组长度不能为负,因此size_t是
sizeof
运算符返回的类型。它总是无符号的。而不是将上面的
arrayCount
count1
声明为type
int
,而是将它们全部声明为
size\u t
size\u t arrayCount
?因为我已经进入C两个月了,那么size\u t arrayCount意味着什么?@artm-正确。最好是尺寸合适。我要离开OP发布的内容,因为那是他发布的内容。我假设他的老师希望他这样编码。
size\u t
只是表示
unsigned int
unsigned long
的另一种方式。由于数组长度不能为负,因此size_t是
sizeof
运算符返回的类型。它总是无符号的。您不需要在上面将
arrayCount
count1
声明为type
int
,而是将它们全部声明为
size\t
。大小代码是什么样的?int size_t(arrayCount)?size_t是无符号64位整数的类型别名。当引用数组的大小时,size\u t是正确的类型,因为它支持所有可能需要的值。@ChrisRollins不一定是64位size\u t代码是什么样子的?int size_t(arrayCount)?size_t是无符号64位整数的类型别名。当引用数组的大小时,size\u t是正确的类型,因为它支持所有可能需要的值。@ChrisRollins不一定是64位的