我有一個指向指針的指針,因爲我無法將動態數組傳遞給函數。但是,如果我想用預製數據初始化該指針指針,我該如何設置它,因爲數組的{a,b,c}表示法不適用於指針?如何使用預製數據初始化指針指針?
回答
你可以這樣做:
static int row1[] = {1, 2, 3};
static int row2[] = {4, 5, 6, 7};
static int row3[] = {8, 9, 10, 11, 12, 13};
static int *pptr[] = {row1, row2, row3};
在這一點上,pptr
可以分配到一個int**
:
int **p = pptr;
謝謝,這個解決方案有效。我不喜歡它,因爲在我的腦海中,我認爲有一個更優雅的解決方案,或者我做錯了矩陣。它的工作原理雖然很直觀。 – BLaZuRE 2012-01-29 04:50:11
@BLaZuRE鑑於您可以使用C++庫的強大功能,所以選擇執行矩陣的雙指針確實看起來並不理想。一個更好的選擇是矢量矢量,因爲內存將自動爲您管理。 – dasblinkenlight 2012-01-29 13:59:53
[如果你需要一個雙*這答案只有相關。你的問題是編輯說指針的指針 - 如果這是你需要什麼,這個答案是不相關]
你可以這樣做,而不是:
double fValues[3] = { 1, 2, 3 };
變量fValues已經是一個指針 - 。沒有[]的數組變量是指向數組的第一個元素的指針。這不是一個動態數組,所以你不需要分配/釋放它的內存。
假設你的函數,需要一個雙指針看起來是這樣的:
void Func(double* pDbl) {...}
你這樣稱呼它:
Func(fValues);
可以遞歸創建小的動態數組像這樣:
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
typedef struct
{
int* pValues;
size_t Count;
} List;
const List ListEnd = { NULL, 0 };
List NewList(int Value, List SubList)
{
List l;
l.Count = SubList.Count + 1;
if (SubList.Count == 0)
{
l.pValues = malloc(sizeof(int));
}
else
{
l.pValues = realloc(SubList.pValues, l.Count * sizeof(int));
}
if (l.pValues == NULL)
{
// do proper error handling here
abort();
}
// moving data isn't necessary if the list elements are
// in the reverse order
memmove(&l.pValues[1], &l.pValues[0], SubList.Count * sizeof(int));
l.pValues[0] = Value;
return l;
}
void PrintDynArr(int* pValues, size_t Count)
{
while (Count--)
{
printf("%d\n", *pValues++);
}
}
int main(void)
{
int* p;
PrintDynArr(p = NewList(1,
NewList(2,
NewList(3,
NewList(4, ListEnd)))).pValues,
4);
free(p);
return 0;
}
輸出:
1
2
3
4
你爲什麼要這樣做,而不是僅僅使用'std :: vector'? – 2012-01-29 18:02:55
- 1. 初始化指針數組的指針
- 2. 指針初始化
- 3. 指針初始化
- 4. 初始化指針
- 5. 指針vs零初始化指針
- 6. 初始化指針數組
- 7. 初始化函數指針
- 8. 初始化指針數組
- 9. 如何初始化指針指向C中的指針結構?
- 10. 用指向指針的指針初始化矩陣?
- 11. 字符指針初始化
- 12. 指針初始化問題
- 13. 指針的初始化
- 14. 模板指針初始化
- 15. 初始化指針在C++
- 16. 初始化指針的typedef
- 17. 指針初始化疑問
- 18. 指針 - 初始化元素
- 19. 初始化結構指針
- 20. 指針在初始化
- 21. 初始化堆棧指針
- 22. 在初始化指針
- 23. 字符指針初始化
- 24. TCHAR指針初始化
- 25. 的char *指針初始化
- 26. 指針初始化:何時將NULL分配給已初始化的指針?
- 27. 初始化字符串使用指針
- 28. 初始化指針使用malloc
- 29. 使用'this'指針初始化std :: array
- 30. C++的指針初始化及使用
爲什麼你不能將動態數組傳遞給函數?什麼是函數簽名?你對動態數組有什麼瞭解?發佈相關代碼,例如要使用的函數,要傳遞的數據,然後說明問題! – Nawaz 2012-01-29 04:16:16
我不想被傳遞給函數時定義數組的大小所限制。我想有n個數組和x個y數組。 – BLaZuRE 2012-01-29 04:53:15
這意味着,你不知道什麼* dynamic *數組,是嗎? – Nawaz 2012-01-29 05:07:31