本文目錄一覽:
C語言數組基本問題
第一:
為什麼p=s非法:因為C++數組中數組名字相當於是指向數組第一個元素的指針
所以 s相當於取一個指針的地址,你必須用 指向指針的指針int **p = s。這樣才能保存。
第二:
而p=s[i]合法
s[i]是數組中的第i個元素的值。所以你可以用s[i]取到的是數組第i個元素的地址, int *p = s[i],用指針指向第i個元素地址。
怎麼理解C語言的取值運算符「*」
我也是初學,我試試我的解釋,你要當所有多維數組當成一維數組來看,因為編譯器在解讀數組時,就是這樣的,首先你說的a是個二維數組,說是二維其實在內存中還是以一維形式存儲,也就是線性存儲,你可以想像一維數組在內存中是一個個排序的,二維數組是一段段排序的,每段就是一行,而編譯器在解讀二維數組時,會先把一行看成一個大元素,所以當時使用*a時,實際就是返回a第一行(這個大元素)存儲的值,而這個值也就是一維數組的地址值,當使用a+1時,就是行指向,若想指向行中的小元素,必須要使用*返回一次,得到一維數組後,這時候+1就是在按小元素指向,若想返回這個元素的值,就要再使用一個*取值
c語言中如何使返回值為數組
1、注意C/C++不能直接返回一個數組。這是由於在C/C++中,數組不是一種類型,因此不能被直接返回。
2、在C/C++中,一般有兩種方法來返回一個數組。
第一種方法:
返回一個指向數組的指針,例如char (*retArray)[10]聲明了一個函數retArray,該函數可以返回指向具有10個char元素的數組例子如下:#include#includeint (*retArray())[10]{int (*a)[10];int i=0;/*動態開闢空間*/
a=calloc(10,sizeof(int));/*賦值*/for(i=0;i10;i++){(*a)[i]=i;}return a;}int main(){int (*b)[10];
/*函數返回指向數組的指針*/
b=retArray();
/*打印第一個元素*/
printf(“%d/n”,(*b)[0]);
/*釋放空間*/free(b);return 0;}第二種方法:
如果你不喜歡用指針的形式返回數組,那麼可以採用返回一個結構的形式。這種形式相對較安全,可以避免忘記釋放指針而造成內存泄露,也可以避免訪問懸掛指針造成的錯誤。但缺點是由於結構是先拷貝再返回,因此如果結構較大時,會影響效率和佔用較大內存。
例子如下:#includestruct tag{int a[10];}x,y;struct tag retArray(){int i=0;for(i=0;i10;i++)
x.a[i]=i;return x;}int main(){struct tag y=retArray();
printf(“%d/n”,y.a[3]);return 0;}注意:(1)在返回指針時要切記要避免內存泄露和訪問懸掛指針。
(2)很多人認為指針和數組等價的,這是錯誤的。int (*a)[10]和int b[10]兩者是不能直接用a=b來賦值的。在數組和指針作為函數參數傳遞時,二者可以認為等價,這是因為數組會被轉化為指針來傳遞。
(3)返回多維數組方法類似。
原創文章,作者:BXHV,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/144533.html