精华内容
下载资源
问答
  • C语言数组长度极限

    千次阅读 2017-06-18 14:58:39
    今天在做《计算机图学实验》大作业的时候,定义了一个数组用于存放顶点坐标,数组长度为1025*1025,可是总是弹出错误,最后经过上网查找,发现错误原因在于我的数组是在函数体内定义的。 函数体内定义的的数组存在...

    今天在做《计算机图学实验》大作业的时候,定义了一个数组用于存放顶点坐标,数组长度为1025*1025,可是总是弹出错误,最后经过上网查找,发现错误原因在于我的数组是在函数体内定义的。

    函数体内定义的的数组存在于stack,函数体外的或者用static声明的数组存在于data,变量存储的内存空间不同,所以大小限制自然不同。我改为在函数体外定义,果然就正常运行了~

    展开全文
  • 作者个人认为,一个程序员想要走的多远,就应该有多深的基础,这次我小小的分享一个小知识点,也就是数组传递到函数要怎么传递 很多人都会遇到这样的函数 比如 int s[4]; find(s,5); 其实这就只是把第一个...
    #include<bits/stdc++.h>
    using namespace std;
    typedef struct{
    	char name[100];
    	char id[100];
    	char sex;
    	int year,mon,day;
    	double C,M,E; 
    	double sum,ave;
    }student;//先弄好结构 
    
    void input(student *p){
    	scanf("%s %s %c",p->id,p->name,&p->sex);
    	scanf("%d %d %d",&p->year,&p->mon,&p->day);
    	scanf("%lf %lf %lf",&p->C,&p->M,&p->E);
    	p->sum=p->C+p->M+p->E;
    	p->ave=p->sum/3;
    }//输入 
    
    void output(student *p){
    	printf("%s %s %c ",p->id,p->name,p->sex);
    	printf("%d %d %d ",p->year,p->mon,p->day);
    	printf("%.1f %.1f %.1f ",p->C,p->M,p->E);
    	printf("%.1f %.1f\n",p->ave,p->sum);	
    	
    }//输出 
    
    void outputArray(student *p,int n)
    {
    	
    	for(int i=0;i<n;i++){
    		output(&p[i]); 
    	}
    }//对应List 
    
    int find(student *p,int n,char id[])
    {
    	for(int i=0;i<n;i++){
    		if(strcmp(p[i].id,id)==0){
    			return i;
    		}
    	}
    	return -1;
     } 
     
    int main()
    {
    
    	char order[100];//字符串长度
    	student s[100];
    	char id[100];
    	student temp;
    	int i,index,n=0;
    	i=0;
    	while(1){
    	
    		scanf("%s",order);	
    		if(strcmp(order,"Insert")==0){
    			input(&temp);//开始调用函数 
    			printf("Insert:\n");
    			index=find(s,i,temp.id);//(注意这里)也可以写成find(&s[0],i,temp.id) 
    			if(index==-1){
    				s[i]=temp;
    				output(&s[i]);
    				i++;
    			}//需要修改的为题  不存在学号为id的学生无法输出failed 
    			else{
    				printf("Failed\n");
    			}
    		}//上面的代码是查找 下面才是改变 
    			else if(strcmp(order,"Delete")==0){
    			     scanf("%s",id);
    	        	 index=find(&s[0],i,id);
    	        	 printf("Delete:\n");
    	        	 if(index==-1){
    	        	 	printf("Failed\n");
    	        	 }
    	        	 else{
    				     printf("Deleted\n");
    				     for(n=index;n<=i-1;n++){
    				     	s[n]=s[n+1]; 
    				     }
    			     	 i--;
    				 }
    		}
    		else if(strcmp(order,"Change")==0){
    			printf("Change:\n");
    			input(&temp);	
    			index=find(&s[0],i,temp.id);//   get新知识点!!!  find(s,5)==find(&s[0],5)// 也就是将第一个指针传过去, 并带上长度 
    			if(index!=-1){
    				s[index]=temp;
    				output(&s[index]);
    			}
    			else{
    				printf("Failed\n");
    			}
    		}
    		else if(strcmp(order,"Find")==0){
    			scanf("%s",id);
    			printf("Find:\n");
    			index=find(s,i,id);
    			if(index==-1){
    				printf("Failed\n");
    			}
    			else{
    				output(&s[index]);
    			}
    		}
    	
    		
    		//k=index s=s n=i
    			else if(strcmp(order,"List")==0){
    			printf("List:\n");
    			outputArray(s,i);
    		}//输出所有学生 
    	
    		else if(strcmp(order,"Quit")==0||strcmp(order,"Exit")==0){
    			printf("Good bye!\n");
    			break;
    		} 
    
    	}
    	return 0;
    }

    作者个人认为,一个程序员想要走的多远,就应该有多深的基础,这次我小小的分享一个小知识点,也就是数组传递到函数要怎么传递

     

    很多人都会遇到这样的函数

    比如

    int s[4];

    find(s,5);

    其实这就只是把第一个指针传过去,并带上长度,仅此而已;

    所以我这里写另一个更浅显易懂的格式

    int s[4];

    find(&s[0],5)

    下面带上一题有点长的例题

     

    2000-删除学生信息

    时间限制: 1000 毫秒   内存限制: 32768 K字节
    判题规则:严格比较

    问题描述

    
     

    请设计一个简单的学生成绩管理系统,要求系统实现以下功能: 插入一个学生的信息: 插入学生信息: Insert id name sex year month day x y z, 其中的参数分别为学号、姓名、性别、 出生日期(年、月、日)、三门课的成绩,成绩为浮点数。 按输入顺序输出学生信息 List 查找学生信息: Find id 查找学号为id的学生信息。 修改学生信息: Change id newname,newsex,newyear,newmonth,newday,newx,newy,newz 把学号为id的学生信息修改为 newname,newsex,newyear,newmonth,newday,newx,newy,newz(学号保持不变) 删除学生信息: Delete id 删除学号为id的学生信息 退出程序:Quit或者Exit 请注意:姓名的长度不超过20。

    输入

    
     

    输入有多行,每行一条指令,指令格式如下: Insert id name sex year month day x y z 其中的参数分别为学号、姓名、性别、出生日期(年、月、日)三门课的成绩,成绩为浮点数。 List 按输入的顺序输出所有学信息。 Find id 查找学号为 id 的学生信息。 Change id newname,newsex,newyear,newmonth,newday,newx,newy,newz 把学号为id的学生信息修改为 newname,newsex,newyear,newmonth,newday,newx,newy,newz(学号保持不变) Delete id 删除学号为id的学生信息 Quit或者Exit 输出"Good bye!"后结束程序。

    输出

    
     

    输出有多行,对应命令的输出如下: Insert id name sex year month day x y z 插入后在单独的一行中输出"Insert:",如果链表中不存在相同学号的学生信息,在第二行中显示学生信息, 格式: id name sex year month day x y z ave sum,分别为学号、姓名、性别、 出生日期(年、月、日)和三门课(语文、数学、英语)的成绩,平均成绩和总成绩, 数据之间用一个空格分开,成绩保留1位小数。 否则,输出"Failed" List 输出"List:"后,按输入顺序输出所有学生的信息,格式与插入学生信息后输出的格式相同。 Find id 第一行显示”Find:",第二行显示格式如下: 如果找到学号为id的学生,则在单独一行中显示学生信息, 格式如List。否则在单独一行显示"Failed"。 Change id newname,newsex,newyear,newmonth,newday,newx,newy,newz 第一行显示"Change:"。如果链表中不存在学号为id的学生,显示"Failed"。 否则修改该学生信息并在单独一行中显示该生信息,显示格式如List命令。 Delete id 第一行显示"Delete:"。如果链表中不存在学号为id的学生,显示"Failed"。 否则删除该学生信息并在单独一行中显示"Deleted" Quit或者Exit 在单独一行中输出"Good bye!"后结束程序。

    输入样列

    Insert 0911001 zhangsan F 1992 3 24 87 78 65
    Insert 0911003 Lisi F 1992 5 3 77 72 55
    Find 0911002
    Find 0911003
    Insert 0911002 zhaoliu F 1993 8 8 97 90 55
    List
    Insert 0911001 zhangou M 1992 3 24 98 78 65
    Change 0911002 zhaoliu M 1990 9 9 90 91 92
    Change 0911005 zhaoliu M 1990 9 9 90 91 92
    Delete 0911001
    List
    Delete 0911006
    Insert 0911005 Wangrong F 1990 12 12 68 56 100
    Find 0911002
    Insert 0911004 Wangwu F 1991 9 2 68 56 95
    Quit
    

    输出样例

    Insert:
    0911001 zhangsan F 1992 3 24 87.0 78.0 65.0 76.7 230.0
    Insert:
    0911003 Lisi F 1992 5 3 77.0 72.0 55.0 68.0 204.0
    Find:
    Failed
    Find:
    0911003 Lisi F 1992 5 3 77.0 72.0 55.0 68.0 204.0
    Insert:
    0911002 zhaoliu F 1993 8 8 97.0 90.0 55.0 80.7 242.0
    List:
    0911001 zhangsan F 1992 3 24 87.0 78.0 65.0 76.7 230.0
    0911003 Lisi F 1992 5 3 77.0 72.0 55.0 68.0 204.0
    0911002 zhaoliu F 1993 8 8 97.0 90.0 55.0 80.7 242.0
    Insert:
    Failed
    Change:
    0911002 zhaoliu M 1990 9 9 90.0 91.0 92.0 91.0 273.0
    Change:
    Failed
    Delete:
    Deleted
    List:
    0911003 Lisi F 1992 5 3 77.0 72.0 55.0 68.0 204.0
    0911002 zhaoliu M 1990 9 9 90.0 91.0 92.0 91.0 273.0
    Delete:
    Failed
    Insert:
    0911005 Wangrong F 1990 12 12 68.0 56.0 100.0 74.7 224.0
    Find:
    0911002 zhaoliu M 1990 9 9 90.0 91.0 92.0 91.0 273.0
    Insert:
    0911004 Wangwu F 1991 9 2 68.0 56.0 95.0 73.0 219.0
    Good bye!
    

     

    展开全文
  • C语言变长数组

    千次阅读 2018-02-18 19:35:12
    我们知道,与C++等现代编程语言不同,传统上的C语言是不支持变长数组功能的,也就是说数组长度是在编译期就确定下来的,不能在运行期改变。不过,在C99标准中,新增的一项功能就是允许在C语言中使用变长数组。然而...
    我们知道,与C++等现代编程语言不同,传统上的C语言是不支持变长数组功能的,也就是说数组的长度是在编译期就确定下来的,不能在运行期改变。不过,在C99标准中,新增的一项功能就是允许在C语言中使用变长数组。然而,C99定义的这种变长数组的使用是有限制的,不能像在C++等语言中一样自由使用。

    变长数组有以下限制[1]
    1、变长数组必须在程序块的范围内定义,不能在文件范围内定义变长数组;
    2、变长数组不能用static或者extern修饰;
    3、变长数组不能作为结构体或者联合的成员,只能以独立的数组形式存在;
    4、变长数组的作用域为块的范围,对应地,变长数组的生存时间为当函数执行流退出变长数组所在块的时候;

    [1] Samuel P. Harbison III, Guy L. Steele Jr.; C: A Reference Manual Fifth Edition; Prentice
    [C语言变长数组zz]<http://blog.csdn.net/hannick/article/details/2119223>
    展开全文
  • C语言中动态数组的实现

    万次阅读 多人点赞 2016-12-26 09:48:52
    C语言中动态数组的实现在C语言中,数组长度在定义变量的时候便需要指定,并且只能是一个常数,不能是其它变量。所以,一旦定义了一个数组,系统将为它分配一个固定大小的空间,以后都不能改变,这样的数组称为静态...

    C语言中动态数组的实现

    在C语言中,数组的长度在定义变量的时候便需要指定,并且只能是一个常数,不能是其它变量。所以,一旦定义了一个数组,系统将为它分配一个固定大小的空间,以后都不能改变,这样的数组称为静态数组。

    但在某些时候,我们需要的数组的长度是无法预先确定的,要解决这样的限制,需要使用动态数组。动态数组是相对于静态数组而言。动态数组的内存空间是从堆(heap)上分配的,是在执行代码过程中分配的,当程序执行到这些语句时,才为其分配。注意,程序员自己负责释放内存。

    创建动态数组的例子如下所示:

    #include<stdio.h>
    #include<stdlib.h>
    
    int main(){
    int arrLen; //数组的长度
    char *array; //数组指针
    char c;
    int i;
    printf("please set the size of the array:");
    scanf("%d",&arrLen);
    
     // 动态分配内存空间,如果失败就退出程序
        array = (char*)malloc( arrLen*sizeof(char) );
        if(!array){
            printf("创建数组失败!\n");
            exit(1); 
        }
    
    // 向内存中写入数据
        for(i=0; i<arrLen; i++){
            c =getchar();
            array[i] = c; //*array++ =c;是通过指针对数组进行操作,也是可以的。
        }
    
        // 循环输出数组元素
        for(i=0; i<arrLen; i++){
            printf("%c  ", array[i]);
        }
    
        printf("\n");
        free(array); //释放内存
    
        system("pause");
        return 0;
    }

    运行结果,是你手动输入的字母。

    malloc()是用来动态分配制定大小的内存空间。
    free()是用来释放整块内存。
    python

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

    千次阅读 2013-07-18 00:10:48
    我们知道,与C++等现代编程语言不同,传统上的C语言是不支持变长数组功能的,也就是说数组长度是在编译期就确定下来的,不能在运行期改变。不过,在C99标准中,新增的一项功能就是允许在C语言中使用变长数组。然而...
  • C语言变长数组之剖析

    2009-01-21 10:17:51
    我们知道,与C++等现代编程语言不同,传统上的C语言是不支持变长数组功能的,也就是说数组长度是在编译期就确定下来的,不能在运行期改变。不过,在C99标准中,新增的一项功能就是允许在C语言中使用变长数组。然而...
  • 算法提高 6-9删除数组中的0元素 时间限制:1.0s 内存限制:512.0MB ... 编写函数CompactIntegers,删除数组中所有值为0的元素,其后元素... 输入时首先读入数组长度,再依次读入每个元素。 将调用此函数后...
  • 算法提高 递归倒置字符数组 时间限制:1.0s 内存限制:512.0MB ... 完成一个递归程序,倒置字符数组... 字符数组长度及该数组 输出格式  在求解过程中,打印字符数组的变化情况。 最后空一行,在程序结...
  • C语言变长数组(zz)

    万次阅读 2008-02-25 15:34:00
    C语言变长数组之剖析1、引言我们知道,与C++等现代编程语言不同,传统上的C语言是不支持变长数组功能的,也就是说数组长度是在编译期就确定下来的,不能在运行期改变。不过,在C99标准中,新增的一项功能就是允许...
  • 这种方法源于我在做一套管理系统时,需要对长达14位到20位的编号进行排序,其中关键的部分就在于c语言本身double型变量的长度限制无法满足实际需求,因此采用char数组,一位一位判断即可。 #include <stdio.h>...
  • 给你一个整数数组 nums ,和一个表示限制的整数 limit,请你返回最长连续子数组长度,该子数组中的任意两个元素之间的绝对差必须小于或者等于 limit 。 如果不存在满足条件的子数组,则返回 0 。 示例 1: 输入...
  • 多维数组是指拥有多组小标的数组,维数的限制有具体编译器决定。多维数组的一般声明形式为: 数据类型 数组名[长度1][长度2]......[长度n]; 数组的总长度等于每组下标长度的乘积。多维数组使用连续的存储空间...
  • 由于编译器原理的限制,在一个数组Elemtype test[m][n]中,访问test[i][j]时(也就是寻找绝对地址了),`loc(i,j)=loc(0,0)+i * n * sizeof(Elemtype)+j * sizeof(Elemtype)` **注**:Elemtype是存储的元素类型,...
  • 就是定义一个字符串变量,直接可以赋值,但在C语言里没有字符串变量这样的概念,只有字符数组,因此,只能定义一个固定数组,或用malloc动态分配一个固定的空间,但始终都受固定的限制,很多人都在思索,到底可以...
  • 由于在数组在Java中是类(也就是引用类型),相比C语言数组发生了较多的变化,主要体现在初始化方式以及长度限制两方面,具体见下面两种代码实现。public class YangHui { public static void main(String[] args...
  • 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输出: 2 限制: 1 <= 数组长度 <= ...
  • 代码长度限制: 16 KB 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0A1⋯AN−1)变换为(AN−M⋯A​N−1 A​0​​ A​1 ⋯A​N−M−1​...
  • 给定一个升序排列的数组,去掉重复的数,并输出新...要求:不能新开数组分配额外的空间,即常数空间限制。输入格式输入一个整数 n(1 \leq n \leq 1000)n(1≤n≤1000)。接下来一行 nn 个整数 A_i(-1000 \leq A_i...
  • 复习PHP的数组

    2017-01-08 14:16:00
    (c语言必须指定数组长度,超出长度会溢出)  2.php数组没有数据类型限制。(c语言必须声明存储的数据类型)  3.数组的下标可以是数值或者字符串 3.数组的基本语法  1.显示数组语法  $arr = arra...
  • 动态创建数组

    2014-09-26 16:31:02
    数组类型的变量有三个重要的限制:数组长度不变,在编译时必须知道其长度,数组只在定义它的语句块内存在。实际的程序往往需要动态的分配数组。虽然数组长度是固定的,但动态分配的数组不必在编译时知道其长度,可以...
  • 题目描述: 统计一个数字在排序数组中出现的次数。...= 数组长度 <= 50000 作者:Krahets 链接:https://leetcode-cn.com/leetbook/read/illustration-of-algorithm/5874p1/ 来源:力扣(LeetCode)
  • 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例 1: 输入: [2, 3, 1,...
  • 代码长度限制 8000 B 判题程序 Standard 一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0A1……AN-1)变换为...
  • 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。 示例 1: 输入: [2, 3, 1, 0,...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 190
精华内容 76
关键字:

c语言数组长度限制

c语言 订阅