如何解决在传递给函数时在 C 中查找数组的大小
我现在有点卡住了。我试图在函数中找到数组的大小。出于某种原因,对于任何大小的数组,我都得到了 8 的常量值。我正在尝试“sizeof()”,并且数组是字符,所以每个字符的大小是 1。但是当在主中使用大小时,我得到了正确的大小。
#include <stdio.h>
void count(char* x,char* y){
int x_Size = sizeof(x);
int y_Size = sizeof(y);
printf("size of function x size:%lu\n",sizeof(x));
printf("size of function y size:%lu\n",sizeof(y));
for(int i = 0 ; i < sizeof(y)-1; i++){
printf("%c",y[i]);
}
}
int main(){
char c1[] = "hello where are we?";
char c2[] = "ye";
printf("size of main c1: %lu\n",sizeof(c1));
printf("size of main c2:%lu\n",sizeof(c2));
count(c1,c2);
return 0;
}
解决方法
仔细看你的函数声明
void count(char* x,char* y){
^^^^^^^ ^^^^^^^
它的参数具有指针类型,更准确地说是 char *
类型。
所以在带有 sizeof
运算符的函数表达式中,就像在这些声明中一样
int x_Size = sizeof(x);
int y_Size = sizeof(y);
产生系统中等于 8 的指针大小。
也用作函数参数的数组指示符,例如在此调用中
count(c1,c2);
被隐式转换为指向它们的第一个元素的指针。
另一方面,在调用 printf 时使用的表达式中的 main
printf("size of main c1: %lu\n",sizeof(c1));
printf("size of main c2:%lu\n",sizeof(c2));
有些使用过的数组在 sizeof
运算符中使用时不会转换为指向其第一个元素的指针。所以你确实在这些调用中获得了数组的大小。
来自 C 标准(6.3.2.1 左值、数组和函数指示符)
3 除非是 sizeof 运算符或一元 & 的操作数 运算符,或者是用于初始化数组的字符串文字, 类型为“类型数组”的表达式被转换为 类型为“指向类型的指针”的表达式,指向首字母 数组对象的元素并且不是左值。如果数组对象 有寄存器存储类,行为未定义。
在函数 count
中,您可以使用标准函数 strlen
确定传递的数组中存储的字符串的长度。然而,数组的大小可能与数组中存储的字符串长度不同。
通常,如果要将数组传递给函数,还需要显式传递数组中的元素数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。