精华内容
下载资源
问答
  • #include int main(int argc, const char * argv[]) { ... struct Student { ... int length = sizeof(stu) / ... printf("不及格人数 = %d , 平均分数是 %.2f\n", count,sumScore/length); return 0; }


    #include <stdio.h>
    
    int main(int argc, const char * argv[])
    {
    
    	struct Student {
    		int num;
    		char * name;
    		char sex;
    		float score;
    	};
    
    	struct Student stu[5] = {
    		{ 101, "Li ping", 'F', 45 },
    		{ 102, "Zhang ping", 'M', 62.5 },
    		{ 103, "He ping", 'F', 92.5 },
    		{ 104, "Cheng ping", 'M', 87 },
    		{ 105, "Wang ping", 'M', 58 }
    	};
    
    	int count = 0;
    	float sumScore = 0;
    	int length = sizeof(stu) / sizeof(stu[0]);
    	printf("%d\n", length);
    	for (int i = 0; i < length; i++) {
    		if (stu[i].score < 60.0) {
    			count++;
    		}
    		sumScore += stu[i].score;
    	}
    	printf("不及格人数 = %d , 平均分数是 %.2f\n", count,sumScore/length);
    
    	return 0;
    }


    展开全文
  • C语言数组长度的计算详解

    千次阅读 2020-05-23 18:23:01
    C语言数组长度的大小可以使用: int main() { int arr[] = {1,2,3,4,5}; int length = sizeof(arr)/sizeof(int); printf("the length of arr is %d\n", length); } 2) 在函数调用中计算数组的长度 上述计算数组...

    一、 C语言中计算数组长度大小

    C语言字符串长度的计算可以使用strlen(str); 但是对于数组长度的大小却没有相关函数可以使用;
    C语言数组长度的大小可以使用:

    int main()
    {
    	int arr[] = {1,2,3,4,5};
    	int length = sizeof(arr)/sizeof(int);
    	printf("the length of arr is %d\n", length);
    }
    

    二、 在函数调用中计算数组的长度

    上述计算数组长度的方法在函数调用中不可使用,有bug;
    考虑下面代码:

    #include <stdio.h>
    
    void test(int *arr){
            int length = 0;
            length = sizeof(arr)/sizeof(int);
            printf("test: array sizees %d\n", sizeof(arr));
            printf("test: array length %d\n", length);
    }
    
    int main()
    {
            int arr[] = {1,2,3,4,5,6,7,8,9};
            int length = 0;  
        
            length = sizeof(arr)/sizeof(int);
            test(arr);
            printf("main: array sizees %d\n", sizeof(arr));
            printf("main: length of array %d\n", length);
    }
    
    

    其结果是:
    在这里插入图片描述
    造成上述结果的原因是:
    主函数中,正确计算得到数组长度是9,并且数组内存大小是36字节,因为这时候arr是数组首元素,sizeof(arr) 计算得到的是一整段连续内存空间的大小,即36字节;
    子函数中, 由于主函数中的数组首元素经过函数参数传递给子函数, 将实参赋值给形参的过程中,数组首元素转化为一个整型指针,所以子函数中sizeof(arr)得到的是一个指针内存大小。博主电脑是64位,而整型int大小是4位,最后得到数组长度是2;

    三、 在子函数中得到主函数中数组长度的方法

    建议方法是在传递数组首地址的时候,一同将数组长度也传递过去

    #include <stdio.h>
    void test(int arr[], int length)
    {
            for(int i = 0; i < length; i++)
                    printf("%d, ", arr[i]);
            printf("\n");
    }
    
    int main()
    {
            int arr[] = {1,2,3,4,5,6,7,8,9};
            int length = sizeof(arr)/sizeof(int);
        
            test(arr, length);
    }
    

    四、 将数组和数组长度传递给子函数对于数列是可行的,但是对于二维数组(即表),会产生Segmentation fault(core dump)错误;

    #include <stdio.h>
    #include <stdlib.h>
    void test(int **arr, int n)
    {
            for(int i = 0; i < n; i++)
                    arr[i][i] = 0;   
    }
    
    int main()
    {
            int n = 6;
            int arr[n][n];
            for(int i = 0; i < n; i++)
                    arr[i][i] = 0;
            test(arr, n); 
    }
    

    原因分析:主函数中,将二维数组都赋值为0;可以实现;
    子函数中, 将二维数组赋值为0,失败;经过分析,子函数中一旦出现arr[i][i] 语句就会失败; 本人猜测的原因在于,arr在主函数中是数组首地址, arr在子函数中就是一个单纯的指针。 C语言内部有实现arr[i][j]计算的机制,即&arr[i][j] = &arr + sizeof(arr[i]) *i + sizeof(int) *j; 由于arr只是一个单纯的指针,这个计算机制失效;(具体的原因细节没有找到资料,望广大网友提供)

    其他解决办法:
    1) 在子函数test中,函数声明变成如下所示,编译不会出错

    void test(int arr[][n], int n)
    

    2) 将arr声明为全局变量, 也不会有编译出错
    3) 即将arr声明为全局变量, 又使用int [][n], 也会出现意想不到的错误;

    五、 解决子函数中使用二维数组的办法

    对于第4点,可以使用下面代码实现在子函数中对二维数组元素的访问, 避免了使用arr[i][j]计算机制;

    #include <stdio.h>
    #include <stdlib.h>
    void test(int **arr, int n)
    {
            for(int i = 0; i < n; i++)
                    *((int *)arr + n*i +i) = 0;	//arr[i][i] = 0;   
    }
    
    int main()
    {
            int n = 6;
            int arr[n][n];
            for(int i = 0; i < n; i++)
                    arr[i][i] = 0;
            test(arr, n); 
    }
    

    六、 C++中,在子函数中对二维数组对角线赋值应注意初始化

    使用vector数组的时候,如果使用下标arr[][], 一定要注意下标越界,因为vector并不进行下标越界检查;

    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    void test(vector <vector<int>> & arr) {
    	for (int i = 1; i < arr.size(); i++)
    		arr[i][i] = 1;
    }
    
    int main()
    {
    	int n = 6;
    	
    	vector<vector<int>> arr;	//编译无误,因为arr.size() == 0;arr[i][i]没有执行
    	//编译有误,元素vector<int> 没有初始化,使用m[i][i]出错
    	vector<vector<int>> arr(n);	
    	vector<vector<int>> arr(n, vector<int>(n));	//编译无误
    	test(arr);
    	return 0;
    }
    
    
    展开全文
  • C语言获取数组长度

    万次阅读 多人点赞 2019-03-09 10:22:34
    1、c语言中,定义数组后可以用sizeof命令获得数组长度(可容纳元素个数)。 例如: double a[] = {1,2,3,4}; int length; length=sizeof(a)/sizeof(a[0]); //数组占内存总空间,除以单个元素占内存空间大小 printf...

    1、c语言中,定义数组后可以用sizeof命令获得数组的长度(可容纳元素个数)。
    例如:

    double a[] = {1,2,3,4};
    int length;
    length=sizeof(a)/sizeof(a[0]); //数组占内存总空间,除以单个元素占内存空间大小
    printf(“length of a=%d”, length ); //输出length of a=4

    2、但是,通过传递数组名参数到子函数中,以获得数组长度是不可行的。

    例如:

    int getLength(int a[]){
    int length;
    length=sizeof(a)/sizeof(a[0]); //这样是错误的,得到的结果永远是1
    return length;
    }
    因为,a是函数参数,到了本函数中,a只是一个指针(地址,系统在本函数运行时,是不知道a所表示的地址有多大的数据存储空间,这里只是告诉函数:一个数据存储空间首地址),所以,sizoef(a)的结果是指针变量a占内存的大小,一般在32位机上是4个字节。a[0]是int类型,sizeof(a[0])也是4个字节,所以,结果永远是1。

    3、因此,获得数组长度,只能在数组定义所在的代码区中,采用以上方法,才可以达到效果

    展开全文
  • C语言 数组

    2017-07-05 21:25:00
    1. #include<stdlib.h> #include<stdio.h> void main(){ ...intstudents[ ]{67,78,89,43,92,100 };...int length=sizeof (students)/sizeof... //数组长度公式 int l_sum=0; float l_average=0; for(si...

    1.

    #include<stdlib.h>

    #include<stdio.h>

    void main(){

    int students[ ]{67,78,89,43,92,100 };

    int length=sizeof (students)/sizeof(int); //数组长度公式

    int l_sum=0;

    float l_average=0;

    for(size_t i=0; i<lenght:i++)

    {

    l_sum=l_sum+students[i];

    }

    l-average=l_sum/lenght;

    printf("总成绩=%d分\n 平均分:%.1f\n",l_sum,l_average);

    system("pause");

    }

    2.

    #include<stdio.h>

    #include<stdlib.h>

    void main(){

    int l_a=67;

    int l_b=78;

    int l_c=89

    int l_d=43;

    int l_e=92;

    float l_sum=l_a+l_b+l_c+l_d+l_e;

    float l_average=l_sum/5;

    printf("总成绩=%d分\n 平均分:%.1f\n",l_sum,l_average);

    system("pause");

    }

     

    转载于:https://www.cnblogs.com/lenaben/p/7123535.html

    展开全文
  • c语言数组长度

    2019-07-06 00:06:47
    c语言数组长度 退化为指针,求不了 要把个数也传进来. 如果作为函数的参数是没法求的, 但这样是可以的: #define LENGTH(s) (sizeof(s) / sizeof(int)) int s[12]; int length = LENGTH(s); sizeof(s) / sizeof...
  • C语言数组总结

    2019-11-12 20:21:25
    我们把这样的一组数据的集合称为数组(Array),它所包含的每一个数据叫做数组元素(Element),所包含的数据的个数称为数组长度Length),例如 int a[4];就定义了一个长度为 4 的整型数组,名字是 a。 数组中的每...
  • C语言计算数组长度

    2019-03-06 23:17:03
    字符串计算数组长度是strlen(),不要忘记#include&lt;string.h&gt; 和它不带最后一个null就没什么大问题。 sizeof()函数,用来计算()内的对象或者类型所占的内存字节数。用其来计算数组长度的方式很简单,...
  • int length(int *array); 返回数组元素个数 int copyarray(int *src, int *dest); 成功返回0, 失败返回-1 int printarray(int *array); 打印 int insert(int *array, int idx, int val); 成功返回数组大小,失败...
  • C语言获得数组长度的函数

    万次阅读 多人点赞 2018-09-06 17:05:15
    1、c语言中,定义数组后可以用sizeof命令获得数组长度(可容纳元素个数)。 例如: double a[] = {1,2,3,4}; int length; length=sizeof(a)/sizeof(a[0]); //数组占内存总空间,除以单个元素占内存空间大小 ...
  • int get_array_length(int shuzu[]) { int length = 0; while (*(shuzu + length) != -858993460) { length++; } printf("数组长度:%d\n", length); return length; }
  • 在java中,所有引用类型数组均可以利用*.length求出数组长度C语言中是否可以呢?  当然,测试成功代码如下: #include void main() { int i=0; int a[]={1,2,3}; printf("利用sizeof函数获取数组长度...
  • 1 循环队列原理图 2 结构体设计 3 完整源代码 #include #include /* 这是一个c语言用数组方式实现循环队列程序 time : 2015-08-23 ... int length; //数组长度 int *pbase; //数组 int head;//int类
  • C语言数组

    2020-11-16 16:29:43
    //其中,dataType为数据类型,arrayName为数组名,length为数组长度。 例如 double money[20]; /*声明的money是一个内含20个元素的数组,每个元素都是一个double类型的值。数组的第一个元素是money[0], 第二个元素...
  • C语言数组长度

    2010-05-31 22:46:00
    #define LENGTH(s) (sizeof(s) / sizeof(int)) //使用sizeofint s[12]; int length = LENGTH(s); 转载于:https://www.cnblogs.com/hylisa/archive/2010/05/31/1748627.html
  • a[0],a[1],a[2],a[3],a[4]; 数组,我认为是一组同类型数据的集合。在C语言中,数组可以是一维/二维甚至更高维 首先,是一维数组的定义 定义...在这里需要注意的是 ,数组长度中需为要给常量,不能为变量 如:int a[i
  • c语言数组长度

    万次阅读 2018-06-12 11:42:52
    1.在c语言中求数组的长度可用以下方法:char data[1024];...即可求出数组长度为10242.但是,如果是通过传递数组名参数到子函数中,上边的方法获取数组长度是不可行的例如:int myarrlen(char *data) {   int ...
  • c语言没有String类型,更没有String.length()方法,那么要怎么求数组长度呢? 数组举例:int arr[]={2,3,1,4}, char str[]={“Hello”} 获得数组长度可以用这个方法: 比如int数组 sizeOf(arr)/sizeOf(int) 可以求出...
  • c语言中,定义数组后可以用sizeof命令获取数组长度(可容纳元素个数); 如: { int data[5]; int length; length=sizeof(data)/sizeof(data[0]);//数组占内存总空间,除以单个元素占内存空间大小 printf(...
  • C语言0长度数组(可变数组/柔性数组)详解

    万次阅读 多人点赞 2017-03-20 19:37:26
    C语言0长度数组(可变数组/柔性数组)详解 CSDN GitHub C语言0长度数组(可变数组/柔性数组)详解 AderXCoding/language/c/zero_length_array 本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议...
  • C语言sizeof计算数组长度的问题

    千次阅读 2019-07-10 17:48:39
    c语言中,定义数组后可以用sizeof命令获得数组长度(可容纳元素个数)。 例如: int data[4]; int length; length=sizeof(data)/sizeof(data[0]); //数组占内存总空间,除以单个元素占内存空间大小 printf("length...
  • 第一次提问,多包含,也不报错,为什么一运行就按停止工作报错 #include ... printf("请输入定义的数组的最大长度:"); scanf("%d", &j); init_arr(p,j); //init_arr(p,5); show_arr(p); }
  • C语言0长度数组(柔性数组

    千次阅读 2014-06-18 15:13:23
    C语言0长度数组(柔性数组) 0长度数组,又称为柔性数组(flexible array),通常用来实现变长数组,常见于TLV(type-length-value)的数据结构中。在标准 C 和 C++ 中,不允许用 0 长度数组,但在
  • (1)借助sizeof()函数 :#includeint main(){// 定义一个整型数组, 并进行初始化...// 计算数组中数据长度 :// 所有数据的字节数除以一个数据的字节数即为数据的个数 :?length = sizeof(arr) / sizeof(int);printf("数...
  • C语言如何计算数组长度

    万次阅读 多人点赞 2018-05-04 17:17:46
    (1)借助sizeof()函数 :#include&lt;stdio.h&gt;int main(){ // 定义一个整型数组, 并进行... // 计算数组中数据长度 : // 所有数据的字节数除以一个数据的字节数即为数据的个数 :  length = sizeof(arr) / ...
  • 众所周知, GNU/GCC 在标准的 C/C++ 基础上做了有实用性的扩展, 零长度数组(Arrays of Length Zero) 就是其中一个知名的扩展. 多数情况下, 其应用在变长数组中, 其定义如下 struct Packet { int state; int len...
  • C语言没有提供获取数组长度的函数,最起码我不知道,所以编写了一个函数取数组的长度,调试成功,大家可以试试。另外也可以用sizeof(a)/4来取得整型数组的长度,因为整型占4个字节。效果相同。 #include "web_api.h...

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 364
精华内容 145
关键字:

c语言数组长度length

c语言 订阅