/*============================================================================== 文 件 名 : testpointer.c 功 能 : 关于二级指针的使用测试小例子,仅供测试 作 者 : jernymy 日 期 : 2010/01/10 备 注 : 参数传递的时候用指针最好,因为压栈的时候指针,只是压入一个地址的值, 最多4个字节(32位机上),提供的3个测试例子,基于VC6.0的环境。 ==============================================================================*/ #include <stdio.h> #define ASSERT_POINTER_RET_VAR_T(p, str, ret)/ if (NULL == p)/ {/ printf("error: invalid pointer: %s", str);/ return ret;/ } int TwoPointerTestInt(int **ppnInput, int nLen) { int nIdx; printf("int TwoPointerTestInt(int **ppnInput, int nLen) run /n"); ASSERT_POINTER_RET_VAR_T(ppnInput, "ppnInput", 0); ASSERT_POINTER_RET_VAR_T(*ppnInput, "*ppnInput", 0); for (nIdx = 0; nIdx < nLen; nIdx++) { printf("/t%d/n", *(ppnInput+nIdx)); // 地址偏移sizeof(int) 4个字节 } return 1; } int TwoPointerTestChar(char **ppchInput, int nLen) { int nIdx; printf("int TwoPointerTestChar(char **ppchInput, int nLen) run /n"); ASSERT_POINTER_RET_VAR_T(ppchInput, "ppchInput", 0); ASSERT_POINTER_RET_VAR_T(*ppchInput, "*ppchInput", 0); for (nIdx = 0; nIdx < nLen; nIdx++) { printf("/t%c/n", *((char *)ppchInput+nIdx)); // 地址偏移sizeof(char) 1个字节 } return 1; } int TwoPointerTestStr(char **ppchInput, int nLen) { int nIdx; printf("int TwoPointerTestStr(char **ppchInput, int nLen) run /n"); ASSERT_POINTER_RET_VAR_T(ppchInput, "ppchInput", 0); ASSERT_POINTER_RET_VAR_T(*ppchInput, "*ppchInput", 0); for (nIdx = 0; nIdx < nLen; nIdx++) { printf("/t%s/n", *(ppchInput+nIdx)); // 地址偏移sizeof(*pointer) 4个字节 } return 1; } int main(void) { int aanData[2][3] = { {1, 2, 3,}, {5, 6, 7,}, }; char aachData[2][3] = { {'A', 'B', 'C',}, {'X', 'Y', 'Z',}, }; char *pachData[2][3] = { {"Today", "is a ", "very",}, {"Good day", "for ", "us to happy !",}, }; TwoPointerTestInt((int **)aanData, sizeof(aanData)/sizeof(int)); printf("/n"); TwoPointerTestChar((char **)aachData, sizeof(aachData)/sizeof(char)); printf("/n"); TwoPointerTestStr((char **)pachData, sizeof(pachData)/sizeof(pachData[0][0])); return 0; }