11.2 下午关于数组实际字节数计算的知识

发布于 21 天前  212 次阅读


善哉!我是傻逼

first of all,先重新来看sizeof函数,它返回的是你括号里面的总字节数,这并不等于该数组的元素个数

int arr[999]; // 定义一个包含999个整型元素的数组
    
    // 从标准输入读取一个整数并存储到数组的第一个元素中
    scanf("%d", arr[0]);

    // 计算数组的元素个数
    int size = sizeof(arr) / sizeof(arr[0]);
    
    // 输出数组的元素个数
    printf("%d", size);
    
    return 0; // 返回0表示程序正常结束

sizeof(arr)返回整个数组的字节数,sizeof(arr[0])返回单个元素的字节数两者相除可得到数组的元素个数。但是,数组的大小其声明时的大小决定,而不是由实际使用的元素数量决定的。因此,sizeof(arr)会返回整个数组的大小,而不是你实际使用的元素数量,两者相除也不可能得到实际使用的元素数量值


所以呢?你定义的char数组可以用strlen函数(它还非常友好地不会带上字符结束符\0)

唉,先来一步一步说吧

char str[999];
scanf("%s",str);
return 0;

在C语言中,使用scanf("%s", str);来读取字符串时,实际上不需要使用&运算符,因为str本身就是一个指向字符数组首元素的指针。正确的用法是直接使用str

同时,scanf函数可能会因为缓冲区溢出导致报错,为了避免这种情况,可以使用 scanf 的限制功能,例如 scanf("%998s", str);,这样可以确保最多读取998个字符()

为什么不能是%999s?因为最后需要留出一个字符的位置来存储字符串的结束标志 '\0'(空字符)

同时,别的类型的数组或者你定义的变量也可以这样使用,scanf中%后面紧接的数字表示最大读取的单位数量(我感觉这样用词很标准!),而printf中则是总宽度


字符数组中如果你想要存储数字 11 和 12 这样的多个数字,并且能够单独输出它们,你需要以某种方式将它们分隔开(比如空格、逗号),并且切割字符串,这会使简单的东西变得极其复杂,所以,为什么不用int、double这些类型的数组呢?

你为什么傻逼地要先考虑去用动态分配!(<stdlib.h>头文件中定义了动态内存分配的相关函数,包括 malloccallocreallocfree

你可以定义一个变量当作一个计数器啊!

循环里面做两件事情,一个是存数据,另一个则是计数!

我真傻,真的,我单知道下雪的时候野兽在山坳里没有食吃......

届ける言葉を今は育ててる
最后更新于 2024-11-04