C语言中可以定义不定长度的数组(即数组长度由变量确定)吗? C语言中数组长度不能用变量定义吗?

C\u8bed\u8a00\u4e2d\u53ef\u4ee5\u5b9a\u4e49\u4e0d\u5b9a\u957f\u5ea6\u7684\u6570\u7ec4\uff08\u5373\u6570\u7ec4\u957f\u5ea6\u7531\u53d8\u91cf\u786e\u5b9a\uff09\u5417\uff1f

\u6570\u7ec4\u4e0b\u6807\u53ea\u80fd\u662f\u786e\u5b9a\u7684\u6570\uff0c\u4e0d\u53ef\u4ee5\u7528\u6570\u7ec4
\u7528\u6307\u9488\u53ef\u4ee5\uff0c\u7528\u7684\u65f6\u5019\u5c31\u7533\u8bf7\u5185\u5b58\u7a7a\u95f4
\u770b\u770bmalloc\u4ed6\u7684\u7528\u6cd5

C\u8bed\u8a00\u91cc\uff0c\u6240\u6709\u53d8\u91cf\u7a7a\u95f4\u90fd\u662f\u5728\u7a0b\u5e8f\u8fd0\u884c\u4e4b\u521d\u5411\u7cfb\u7edf\u7533\u8bf7\u7684\uff0c\u5305\u62ec\u6307\u9488\uff0c\u9664\u4e86\u4e00\u4e9b\u52a8\u6001\u7533\u8bf7\u65b9\u5f0f\u5982malloc\u51fd\u6570\u3002\u6ca1\u6709\u7533\u8bf7\u7684\u7a7a\u95f4\u7cfb\u7edf\u662f\u4e0d\u5141\u8bb8\u8bfb\u5199\u7684\u3002\u90a3\u4e48\u5982\u679c\u4e00\u4e2a\u6570\u7ec4\u5927\u5c0f\u662f\u53d8\u91cf\u5b9a\u4e49\uff0c\u5219\u5728\u7a0b\u5e8f\u8fd0\u884c\u524d\u4e0d\u80fd\u786e\u5b9a\u6570\u7ec4\u5927\u5c0f\uff0c\u4e5f\u5c31\u65e0\u6cd5\u7533\u8bf7\uff0c\u6545\u4e0d\u5141\u8bb8\u3002\u6240\u4ee5\uff0c\u89e3\u51b3\u7684\u529e\u6cd5\u4fbf\u662f\u901a\u8fc7malloc\u51fd\u6570\uff0c\u5373
int a[n];
\u53ef\u6539\u4e3a
int* const a = (int*)malloc(sizeof(int)*n);
\u8fd9\u6837a\u53d8\u91cf\u5c31\u5b8c\u5168\u53ef\u4ee5\u5f53\u4f5c\u4e00\u4e2a\u6570\u7ec4\u76f4\u63a5\u4f7f\u7528\u4e86\uff0c\u5305\u62eca[1]\u4e4b\u7c7b\u7684\u3002\u56e0\u4e3a\u201c[]\u201d\u4e2d\u62ec\u53f7\u8fd0\u7b97\u7b26\u505a\u7684\u53ea\u662f\u504f\u79fb\u5176\u5185\u7684\u5730\u5740\u6570\u5e76\u53d6\u503c\u3002\u5982\uff1a
a[1]
\u7b49\u4ef7\u4e8e
*(a + 1)
\u800cconst\u4fee\u9970\u7b26\u5728\u661f\u53f7\u4e4b\u540e\uff0c\u5219\u8868\u793a\u6307\u9488\u5728\u88ab\u58f0\u660e\u540e\u4e0d\u80fd\u6539\u53d8\uff0c\u5373\u53ea\u80fd\u6307\u5411\u8fd9\u4e2a\u83b7\u53d6\u7684\u7a7a\u95f4\uff0c\u5b8c\u5168\u7b26\u5408\u6570\u7ec4\u7684\u6027\u8d28
\u7efc\u4e0a\u6240\u8ff0\uff0c\u5982\u679c\u9700\u8981\u53d8\u91cf\u63a7\u5236\u957f\u5ea6\u7684\u4e00\u4e2a\u6570\u7ec4\uff0c\u7c7b\u4f3c\u201cint a[n];\u201d\u7684\uff0c\u53ef\u6539\u6210\u201cint* const a = (int*)malloc(sizeof(int)*n);\u201d\u5e76\u76f4\u63a5\u4f5c\u4e3a\u6570\u7ec4\u4ee5[]\u65b9\u5f0f\u4f7f\u7528\u3002const\u53ef\u4ee5\u53bb\u6389\uff0c\u4f46\u8981\u4fdd\u8bc1\u4f7f\u7528\u65f6\u4e0d\u6539\u53d8a\u7684\u6307\u5411

不可以,数组在创建时长度已经确定了,而且创建后也无法更改数组的长度,楼上说的malloc动态申请的内存也是已确定的,你都不能在 不破坏原有数据的情况下改变其大小。
那怎么储存未知大小的数据呢,在储存后怎样能随意的对其添加、更改、删除、查找等一系列操作呢?只用简单的数组肯定不行,需要用到别的数据结构,如链表、二叉树等等,总有一款适合你。在大家学到数据结构与算法的时候 ,一切难题都将迎刃而解。
最后补充一点,楼上有人说数组的长度不能用变量来确定,这是错误的。 C中有 变长数组 的概念呀(c99标准),“变长”的意思就是 可以用变量来指定数组的长度,而数组一旦创建 长度就无法变化了,而且变量必须赋值在先,变长数组才能创建。某些人不能因为无法正确的设置编译器支持c99标准,而否定了 变长数组 这个用法。

可以使用指针,申请动态空间,完成这个操作,具体的东西,你可以查资料,或者看书,一般的C语言书上都有说明,而且肯定比我们讲的详细的多

数组下标只能是确定的数,不可以用数组
用指针可以,用的时候就申请内存空间
看看malloc他的用法

一维数组定义方式为: 类型说明符 数组名【常量表达式】,常量表达式可以包括常量和符号常量,但绝不能包含变量。换句话说,C语言中不允许对数组的大小做动态定义,即数组的大小不依赖程序运过程中变量值;如:
int n;
scanf("%d",&n);
int a[n];
这是不对的!!!!

有啊,可以看下动态分配内存空间

  • c璇█涓鎬庢牱瀹氫箟涓涓湭鐭闀垮害鐨勬暟缁??
    绛旓細璁剧疆鍊肩瓑浜巒ull灏辫浜
  • c璇█涓鎬庢牱瀹氫箟涓涓湭鐭闀垮害鐨勬暟缁??
    绛旓細浣嗘槸鎵句笉鍒板暒锛侊紒楹荤儲鎮ㄨ兘甯繖缁欎釜渚嬪瓙涓嶏紵锛熻阿璋紒锛 鍥炵瓟锛 閾捐〃 鎸囬拡 闇瑕佺敤杩欎箞楹荤儲鍚椼 鎴戜粠娌¤繖鏍峰紕杩囥 浣犻渶瑕佺殑鏄竴涓湭鐭闀垮害鐨 鏁扮粍 锛屾墍浠ヤ笉缁欒繖涓暟缁勮祴鍊煎氨鏄渶濂界殑銆 姣斿int[] a; 杩欏氨鏄敵鏄庝竴涓 鏁扮粍鍙橀噺 a 锛屼絾娌$粰浠栬祴鍊 鎵浠ヤ粬灏辨病鏈夐暱搴 杩介棶锛 鍝 濂藉惂锛
  • 璇烽棶C璇█涓,濡備綍鍦ㄧ粨鏋勪綋鍐瀹氫箟闀垮害涓嶇‘瀹氱殑鏁扮粍鍛?
    绛旓細涓ょ鏂规硶:涓绉嶆槸閲囩敤鎸囬拡, 鍔ㄦ佸垎閰嶅唴瀛 鍙︿竴绉嶈鎼滅储"鏌旀鏁扮粍", 杩欑鏂瑰紡鍚屾牱闇瑕佸湪鍫嗕腑鍔ㄦ佸垎閰嶅唴瀛.
  • C璇█涓,鏈寚瀹闀垮害鐨勬暟缁澹版槑鏃,鍙互渚濇嵁鍒濆鍊煎垪琛ㄦ潵纭畾鏁扮粍闀垮害鍚...
    绛旓細C璇█涓,鏈寚瀹闀垮害鐨勬暟缁澹版槑鏃,鍙互渚濇嵁鍒濆鍊煎垪琛ㄦ潵纭畾鏁扮粍闀垮害銆傛瘮濡倁nsigned char array[]={12,34,56};铏界劧娌℃湁鎸囧畾闀垮害锛岀郴缁熶粛浼氱粰array鍒嗛厤3涓瓧鑺傜殑绌洪棿锛岄氳繃sizeof(array)璁$畻寰楀埌鐨勭粨鏋滀篃鏄3銆傝閲囩撼锛岃阿璋
  • 鎬庢牱鍦c璇█涓杈撳叆涓涓湭鐭闀垮害鐨鏁板垪?
    绛旓細Dim Obj As Object Obj = New SomeClass("String required by constructor")' ...Dim MyLabel As New Label()鐢变簬鏁扮粍鏄被锛屽洜姝 New 鍙互鍒涘缓鏂鐨勬暟缁瀹炰緥锛欴im MyArray As Integer()MyArray = New Integer() {0, 1, 2, 3} 濡傛灉鍐呭瓨涓嶈冻锛屾棤娉曞垱寤烘柊鐨勫疄渚嬶紝鍏叡璇█杩愯搴撳皢寮曞彂 OutOf...
  • c璇█涓娌℃湁瀹氫箟闀垮害鐨勬暟缁勫彲浠鐩存帴鍒濆鍖栦负0鍚?姣斿int a[]={0}...
    绛旓細鍙互锛c璇█涓鏃闀垮害鏁扮粍鍦ㄥ0鏄庢椂锛屼竴瀹氳璧嬪垵鍊硷紝绯荤粺鏍规嵁鏁版嵁鐨勫灏戣嚜鍔瀹氫箟鏁扮粍鐨勯暱搴銆傚綋鐒朵篃鍙互璧0鍊硷紝浣嗕篃鍙湁涓涓厓绱狅紝绫讳技浜巌nt a[1]锛宎[0]={0}銆
  • C璇█閲岄潰瑕瀹氫箟涓涓瓧绗︿覆鏁扮粍,鏁扮粍鍏冪礌涓暟涓嶇‘瀹,姣忎釜鍏冪礌鐨闀垮害涔熶笉...
    绛旓細浣犲彲浠ョ敤鍔ㄦ佸垎閰嶅唴瀛樼殑鏂规硶,姣斿浣犺寤虹珛涓涓瓧绗︿覆鏁扮粍:char *str;str=(char *)malloc(n);n鏄彉閲,鍙互鍦ㄧ‘瀹氫簡鍙橀噺鐨勫煎悗鍐嶇敤浠ヤ笂浠g爜鍒嗛厤鍐呭瓨,鑰宻tr瀛楃涓插彲浠ヤ互涓鑸鏁扮粍鐨鐢ㄦ硶浣跨敤,姣斿 str="hello";鐨勮瘽 str[1]='l';鏈鍚庡埆蹇樹簡閲婃斁鍐呭瓨 free(str);
  • C璇█鎬庝箞瀹氫箟涓涓簩缁鏁扮粍鍙互浣挎瘡琛鐨杈撳叆闀垮害浠绘剰
    绛旓細1銆佷娇鐢ㄥ姩鎬鏁扮粍鍙互瀹炵幇鍙闀垮害鏁扮粍銆傚缓鍔ㄦ佹暟缁勶紝鍏朵粬灏卞儚鏁扮粍涓鏍蜂娇鐢ㄥ氨琛屼簡銆2銆佷緥绋嬶細int row=0; //鍑芥暟int col=0; //鍒楁暟int i;int ** arr=NULL; //涓嬮潰鍋囪瀛樺偍鐨勬暟鎹被鍨嬩负intprintf(鈥滆杈撳叆浜岀淮鏁扮粍鐨琛屾暟鍜屽垪鏁帮細鈥濓級;scanf("%d%d",&row,&col);//瑕佷笉瑕佸姞鍒ゆ柇杈撳叆...
  • c璇█涓暱搴鍙彉鐨勬暟缁?
    绛旓細鑰屼笖锛闀垮害鍙彉鏁扮粍鐨勫悕绉板繀椤绘槸鏅氱殑鏍囪瘑绗︺傞暱搴﹀彲鍙鏁扮粍涓嶈兘浣滀负缁撴瀯鎴栬仈鍚堢殑鎴愬憳銆傚湪涓嬮潰鐨勭ず渚嬩腑锛屽彧鏈 vla 鏁扮粍鐨勫畾涔鏄悎娉曠殑锛歷oid func( int n ){int vla[2*n]; // 鍚堟硶锛氬瓨鍌ㄥ懆鏈熶负鍔ㄦ佺殑static int e[n]; // 闈炴硶锛氶暱搴﹀彲鍙鏁扮粍涓嶅彲鏈夐潤鎬佸瓨鍌ㄥ懆鏈 struct S { int f[n]...
  • c璇█涓彲浠鏈夊姩鎬鏁扮粍鍚??
    绛旓細灏界C璇█鎻愪緵浜嗚澶氫綆绾у鐞嗙殑鍔熻兘锛屼絾浠嶇劧淇濇寔鐫鑹ソ璺ㄥ钩鍙扮殑鐗规э紝浠ヤ竴涓爣鍑嗚鏍煎啓鍑虹殑C璇█绋嬪簭鍙湪璁稿鐢佃剳骞冲彴涓婅繘琛岀紪璇戯紝鐢氳嚦鍖呭惈涓浜涘祵鍏ュ紡澶勭悊鍣紙鍗曠墖鏈烘垨绉癕CU锛変互鍙婅秴绾х數鑴戠瓑浣滀笟骞冲彴銆3銆併佸湪鏁扮粍涓绔犱腑锛屾浘浠嬬粛杩囨暟缁勭殑闀垮害鏄鍏瀹氫箟濂界殑锛 鍦ㄦ暣涓▼搴忎腑鍥哄畾涓嶅彉銆C璇█涓笉鍏佽鍔ㄦ佹暟缁...
  • 扩展阅读:水仙花编程题c语言 ... c语言2%6取余怎么计算 ... c语言字符长度怎么看 ... 孩子学python好还是c++好 ... c语言必背100代码 ... 定义数组时不规定长度 ... 2%5取余 ... c语言putchar 的功能 ... c语言怎么计算数字长度 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网