我正在嘗試將指標傳遞給函式,并在該函式中創建一個陣列,并將傳遞的指標設定為該陣列。
我要做的是在函式內部創建一個陣列,然后在函式外部使用該陣列。
void createArray(int *myPointer)
{
int intArray[20];
*myPointer = &intArray[0]; // This line gets error:
// assignment makes integer from pointer without a cast [-Wint-conversion]
for (int i = 0; i < 20; i )
{
intArray[i] = i 10;
}
}
int main(void)
{
int *intPointer;
createArray(&intPointer);
for (int i = 0; i < 20; i )
{
printf("%d : %d \n", i, intPointer[i]);
}
return 0;
}
uj5u.com熱心網友回復:
你打算使用
void createArray(int **myPointer)
這將解決這兩種型別的錯誤。
但這將使' 的指標指向一個在回傳main后不再存在的變數。createArray那很糟。這就是為什么你必須使用malloc而不是自動存盤。
void createArray( int **myPointer ) {
int *intArray = malloc( 20 * sizeof(int) );
*myPointer = intArray; // Same as `&intArray[0]`
if ( !intArray )
return;
for ( int i = 0; i < 20; i )
intArray[i] = i 10;
}
int main(void) {
int *intPointer;
createArray(&intPointer);
if ( intPointer ) {
perror( NULL );
exit( 1 );
}
for (int i = 0; i < 20; i )
printf( "%d: %d\n", i, intPointer[i] );
return 0;
}
uj5u.com熱心網友回復:
編譯器錯誤的原因是*myPointer取消參考,它為您提供int了指標指向的型別內容。編譯器說您不能將指標分配給&intArray[0]plain int。
除了無效的 C 之外,它不會改變指標指向的位置。為此,您必須這樣做myPointer = &intArray[0];。但是,在這種情況下,您也不能這樣做,因為myPointer它只是函式內部的一個本地指標變數 - 您傳遞的指標的本地副本。您需要一種方法來更新main().
此外,我們永遠無法回傳指向本地資料(具有“自動存盤持續時間”的資料)的指標,因為一旦我們離開函式,該資料就不再有效。
正常的解決方案是創建動態分配的記憶體,因為這樣的記憶體會在程式的整個執行程序中持續存在(或者直到你明確地釋放它)。有兩種不同的方法可以為此撰寫函式:
#include <stdlib.h> // for malloc
int* createArray (void)
{
int* result = malloc(20 * sizeof(*result));
if(result == NULL)
return NULL; // some error handling will be required here
for (int i = 0; i < 20; i )
{
result[i] = i 10;
}
return result;
}
...
int *intPointer = createArray();
...
free(intPointer);
或者,您可以按值傳遞指標本身,以便通過執行*myPointer = ...;分配,您可以參考 aint**指向的位置:
#include <stdlib.h> // for malloc
void createArray (int** myPointer)
{
int* result;
result = malloc(20 * sizeof(*result));
if(result == NULL)
{
/* some error handling will be required here */
}
for (int i = 0; i < 20; i )
{
result[i] = i 10;
}
*myPointer = result;
}
...
int *intPointer;
createArray(&intPointer);
...
free(intPointer);
這些都可以,您使用哪一個主要是設計問題。回傳指標的語法更簡單,但通常函式的回傳是為某些錯誤代碼保留的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/454849.html
上一篇:兩個指標的差
