有一段代碼,涉及數組和指針:
1 //通過整形指針數組獲取數組中的元素 2 func test(){ 3 var arr=[]int{1,2,3} 4 var ptr[] *int 5 for i:=0;i<len(arr);i++{ 6 ptr[i]=&arr[i] 7 fmt.Println(*ptr[i],"\t") 8 }
問題出現了:執行上述函數后,控制台報錯:runtime error:index out of range [0] with length 0,出錯代碼指向了第6行,此行出現了空指針
問題原因:在第4行整形數組指針初始化時未給其分配內存空間,所以報錯
問題修改:修改第4行為var ptr[len(arr)] *int,保存后執行,控制台又報錯:non-constant array bound length,出錯代碼是第4行
問題原因:go語言數組動態初始化時,如var array [length]int這樣的寫法(length是動態的)會報錯,需要加make
問題修改:修改第4行為ptr := make([]*int,len(arr))
執行:>>>1,2,3