c语言中一维数组为什么一定要对长度定义,不能自动补0而二维数组就可以没有行数长度,自动补0呢? 二维数组定义不够会自动补0

c\u8bed\u8a00\u4e2d\u5c06\u4e00\u7ef4\u6570\u7ec4\u653e\u5165\u4e8c\u7ef4\u6570\u7ec4\u4e2d\u4f1a\u81ea\u52a8\u8865\u96f6\u5417

\u4f60\u662f\u600e\u4e48\u628a\u4e00\u7ef4\u6570\u7ec4\u653e\u5230\u4e8c\u7ef4\u6570\u7ec4\u7684\uff0cmemcpy?
\u4e0d\u4f1a\u81ea\u52a8\u8865\u96f6\u7684\uff0c\u4f7f\u7528\u4e8c\u7ef4\u6570\u7ec4\u524d\u5148memset\u6216\u8005\u521d\u59cb\u5316a[x][y] = {0};

\u4f1a\u7684,\u5199\u4e2a\u7a0b\u5e8f\u6d4b\u8bd5\u4e00\u4e0b\u5c31\u77e5\u9053\u4e86,C\u548cC++\u90fd\u4e00\u6837.
#include
main()
{
int a[3][4]={{1,1}};
for(int i=0;i<3;i++)
for(int j=0;j<4;j++)
printf("%d\n",a[i][j]);
return 0;
}
\u8f93\u51fa2\u4e2a1,\u540e\u9762\u90fd\u662f0

首先要明确数组的在计算机的分配方式。

计算机会分配一块《连续》的内存给数组来使用,这样就可以通过《下标》很方便的访问数组的元素。因此数组的长度就一定是要固定的,因为内存是一直在动态的分配和释放的,如果数组的长度不固定,那么数组后面的内存到底还要不要分配给别人。如果分配了,数组忽然要增加,那数组内存就不能是连续的了。

所有定义数组时可以省略的字段都是因为可以确定长度,才可以省略。不是说一维数组不能省略长度,当对数组中所有元素都初始化的时候是可以省略的。

比如int a[] = {1,2,3,4,5},这么一定可以省略长度,因为数组长度固定是5了。

而二维数组,当不初始化数组中的任何一个元素时,行列都需要制定,这样才能确定数组的大小。当初始化了其中的元素时,约定制定列数,就可以通过初始化的元素个数,算出最小的行数。

但是行列都不制定就不可以了,比如我初始化了6个元素,即可以是a[2][3]也可以是a[3][2]也可以是a[1][6],会发生歧义,是不允许的。所以二维数组的初始化必须制定一个,至于只必须制定行还是必须制定列,再C语言定义的时候大家预定俗成了制定列,所以就延续下来了。

二维数组根据初始化的组数确定一维的数量,根据二维的数量开辟内存,因此一维可以省略,二维不可省略。

  • 浠涔鏄涓缁存暟缁
    绛旓細闂鍥涳細C璇█涓竴缁存暟缁姝g‘鐨勫畾涔 C鏄纭.涓缁存暟缁勫畾涔:绫诲瀷璇存槑绗﹁妭 鏁扮粍鍚峓甯搁噺琛ㄨ揪寮廬甯搁噺琛ㄨ揪寮忎腑鍙互鍖呮嫭甯搁噺鍜岀鍙峰父閲,浣嗕笉鑳藉寘鎷彉閲,娉ㄦ剰绗﹀彿甯搁噺涓庡彉閲忎笉鑳芥贩娣.鐢ㄤ竴涓爣璇嗙浠h〃涓涓父閲忕殑绗﹀彿,绉颁负绗﹀彿甯搁噺,鍍廈閫夐」涓璱nt n=5鏄鏁村舰 n璧嬩簣5,骞朵笉鏄鍙峰父閲 绗﹀彿甯搁噺渚嬪瓙:define ...
  • c璇█,鍏充簬涓缁存暟缁鍜屾寚閽鐨闂,涓轰粈涔D鏄敊鐨,鎴戣寰桪娌℃湁浠讳綍闂...
    绛旓細鏁扮粍鍚嶄唬琛ㄧ涓涓厓绱犵殑鍦板潃锛屼絾鏄暟缁勫悕涓嶅悓浜庢寚閽堛傛暟缁勫悕涓嶆槸鎸囬拡锛屾墍浠ヤ笉鍙互鍍忔寚閽堜竴鏍疯祴鍊笺俛rr++绛夊悓浜巃rr=arr+1
  • C璇█涓竴缁存暟缁姝g‘鐨勫畾涔
    绛旓細绗﹀彿甯搁噺鏄敤涓涓爣璇嗙鏉ヨ〃绀轰竴涓父閲忥紝涓缁存暟缁勭殑瀹氫箟鏂规硶涓猴細绫诲瀷璇存槑绗+鏁扮粍鍚+[甯搁噺琛ㄨ揪寮廬;绫诲瀷璇存槑绗︽槸浠讳竴绉嶅熀鏈暟鎹被鍨嬫垨鏋勯犳暟鎹被鍨嬨傛暟缁勫悕鏄敤鎴峰畾涔夌殑鏁扮粍鏍囪瘑绗︺傛柟鎷彿涓殑甯搁噺琛ㄨ揪寮忚〃绀烘暟缁勫厓绱犵殑涓暟鎴栬呴暱搴︼紝鍙互鏄父閲忔垨绗﹀彿甯搁噺锛屼笉鑳戒负鍙橀噺銆備緥濡傦細1銆乮nt x[8]; 琛ㄧず瀹氫箟涓涓...
  • C璇█涓鎬庝箞鎶涓缁存暟缁鍒濆鍖栭兘涓0,
    绛旓細2銆佺劧鍚庡氨鏄鏁扮粍鐨鍚嶇О浜嗭紝鍙互鑷繁瀹氫箟锛屼絾鏄绗﹀悎鐩稿簲瑙勫垯銆3銆佷竴鑸湪鏁扮粍瀹氫箟闃舵灏辩‘瀹氭暟缁勭殑澶у皬锛岃緭鍏ユ暟瀛楀嵆涓烘暟缁勫ぇ灏忥紝濡備笅鍥炬墍绀恒4銆佺劧鍚庯紝鍙互瀵规暟缁勮繘琛屽垵濮嬪寲锛屽湪鑺辨嫭鍙穥}涓緭鍏ュ嵆鍙5銆佸鏋滃垵濮嬪寲杈撳叆鐨勬暟瀛楁湭杈惧埌瀹氫箟闀垮害锛屽悗闈㈠垯榛樿鍒濆鍖栦负0銆6銆佸湪鏁扮粍瀹氫箟鍜屽垵濮嬪寲鍚庨潰瑕佸姞涓婂垎鍙...
  • c璇█鏁扮粍瑙勫垯
    绛旓細static int a[10]={0,0,0,0,0,0,0,0,0,0锝;涓嶈兘鐢細static int a[10]={0*10锝;濡傛灉瀵箂tatic鍨嬫暟缁勪笉璧嬪垵鍊硷紝绯荤粺浼氬瀹氫箟鐨勬墍鏈夋暟缁勫厓绱犺嚜鍔ㄨ祴浠0鍊笺(4)鍦ㄥ鍏ㄩ儴鏁扮粍鍏冪礌璧嬪垵鍊兼椂锛屽彲浠ヤ笉鎸囧畾鏁扮粍闀垮害銆3.涓缁存暟缁勭殑寮曠敤鏂规硶鏄細C璇█瑙勫畾涓嶈兘涓娆″紩鐢ㄦ暣涓暟缁勶紝寮曠敤鏃跺彧鑳介愪釜鍏冪礌...
  • 鐢C璇█鍐欎簡涓涓緭鍏ヤ竴涓涓缁存暟缁勭殑鍑芥暟,濡備綍鍦ㄥ悗鏉ュ啓鐨勫嚱鏁颁腑璋冪敤璇...
    绛旓細鍦C璇█涓锛屾棤娉曠洿鎺ヨ繑鍥炰竴涓暟缁勶紝浣嗘槸鍙互閫氳繃杩斿洖瀵瑰簲绫诲瀷鎸囬拡鐨勬柟寮忥紝杩斿洖鏁扮粍銆傚湪澶у鏁版儏鍐典笅锛涓缁存暟缁鍜屼竴缁存寚閽堟槸鍙互閫氱敤鐨勩傛瘮濡傦紝瀹氫箟涓涓嚱鏁帮紝鐢宠涓瀹闀垮害鐨勬暣鍨嬪姩鎬佹暟缁勶紝鍏堕暱搴︾敤鍙傛暟浼犲叆锛屽苟灏嗙粨鏋滆繑鍥炪傚鍑洪敊锛岃繑鍥炵┖鎸囬拡NULL銆備唬鐮佸彲浠ュ啓鎴愬涓嬪舰寮忥細int*int_array_create(int n)//...
  • C璇█涓殑涓缁存暟缁瀵逛簬int a[10]={0,1,2,3,4,}鎰忔濇槸缁欏墠浜斾釜鍏冪礌璧嬪垵 ...
    绛旓細鍚庝簲涓敤0琛ユ弧鍗01234000000渚濇涓篴[0]鈥斺攁[10] ,鍚庨潰搴旇鏄叚涓暟锛屼笉鏄簲涓紝鏁扮粍鍚嶆槸浠巃[1]寮濮嬬殑 缁欑涓涓厓绱犺祴鍊间负a[0]=0
  • 濡備綍鍦C璇█涓杈撳叆涓缁存暟缁?
    绛旓細1銆佽緭鍏鏁扮粍闇瑕浣跨敤鎸囬拡鑾峰彇鍦板潃鍚庯紝灏辫兘瀵瑰緱鍒鐨勬暟缁灏辫鎿嶄綔浜嗐傞鍏堟墦寮DEV C++杞欢锛屾柊寤轰竴涓┖鐧鐨凜璇█鏂囦欢锛2銆佽緭鍏ョ▼搴忕殑婧愮爜锛屽厛瀹氫箟涓涓暣鍨嬫暟缁勨渁[5]鈥濓紝閲囩敤scanf璇彞杈撳叆鏁扮粍涓殑姣忎釜鍏冪礌锛岃繖閲屼娇鐢ㄦ寚閽堟潵瀵硅緭鍏ョ殑鏁板瓧杩涜璁块棶锛岃鍏堢粰杈撳叆鐨勬瘡涓涓暟瀛楃粰浜堝畠鐨勫湴鍧锛屼究浜庤闂紝鏈鍚庢嬁寰楀埌...
  • C璇█缂栫▼鏁扮粍涓殑绗涓缁澶у皬鏄寚浠涔?
    绛旓細C璇█涓绗竴缁村ぇ灏忔槸鎸囨暟缁勭涓缁寸殑闀垮害锛氬涓嬪畾涔変竴涓涓缁存暟缁锛歩nt arr[10];鍒欏叾闀垮害鍙互浣跨敤sizeof(arr)鏉ユ眰寰楋細printf("闀垮害锛%d",sizeof(arr));鍏剁粨鏋滀负锛10 浜岀淮鏁扮粍鐨勭涓缁村ぇ灏忔槸鎸囨暟缁勭殑琛屾暟锛岀浜岀淮鏄暟缁勭殑鍒楁暟锛氬畾涔変竴涓簩缁存暟缁勶細int arr[5][8];鍒欏叾琛屾暟涓5锛屽垪鏁颁负8锛屽叾...
  • 鍦C璇█涓,涓缁存暟缁鐨勫畾涔夋柟寮忎负:绫诲瀷璇存槑绗︽暟缁勫悕鈥斺
    绛旓細C璇█涓竴缁存暟缁鐨勬渶闀跨淮鏁版槸澶氬皯锛熻阿璋紒 ANSI C89鏍囧噯涓瀹氾紝涓涓暟缁勭殑灏哄锛堜笅鏍囷級蹇呴』鏄竴涓暣鍨嬪父閲忚〃杈惧紡浠ヤ究浜庡湪缂栬瘧鏃惰绠楀ぇ灏忥紝鑰岃繖閲岀殑鎵璋撳父閲忥紙鎴栬呭父閲忚〃杈惧紡鐨勮繍绠楃粨鏋滐級锛屼竴鑸槸鎸噓nsigned int銆 16浣嶇紪璇戝櫒锛堟瘮濡俆urbo C锛変腑锛寀nsigned int涓16浣嶏紝鍥犳鏁扮粍鏈澶32767涓暟鎹 32浣...
  • 扩展阅读:c语言一维数组循环 ... c语言和c++学哪个更好 ... c语言数组去除重复值 ... c十十编程难学吗 ... c++和java哪个好就业 ... 一维数组排序从小到大 ... 一维数组格式 ... c语言一维数组求和 ... c语言中一维数组的输出 ...

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