void printArr(int *A, int size){ printf("Elements of array: "); for(int i = 0; i < size; ++i){ printf("%d\t", A[i]); } printf("\n"); } int main() { int C[3][2][2] = {{{1,2},{3,4}},{{5,6},{7,8}},{{9,10},{11,12}}}; // 虽然地址相同,但代表的意义却不相同 printf("%p\t%p\t%p\t%p\t%p\t%p \n", C, *C, C[0], C[0][0], &C[0][0], &C[0][0][0]); printf("%p\t%p\t%p\n", *C+1, C[0]+1, C[0][1]); printf("%p\t%p\n", C, C[0][0] + 1); printf("%p\t%p\n", C, &C[0][0] + 1); // 分配空间,但不会对元素进行初始化 int *A = (int*)malloc(3 * sizeof(int)); for(int i = 0; i < 3; ++i){ A[i] = i+1; } printArr(A, 3); // 分配空间,并将元素初始化为0 int *B = (int*)calloc(3, sizeof(int)); printArr(B, 3); // 重新分配一块空间(新空间可大可小) // 并把原来的数据拷贝过来 // 如果新空间首地址与原来空间地址不同,会将原来的内存空间释放 // ,注意:此时不能再继续访问原来的地址,虽然原来的指针并未置空 int *D = (int*)realloc(A, 10 * sizeof(int)); printf("%p\t%p\n", A, D); printArr(A, 3); // 此时不能访问 A 了,这是危险的行为 printArr(D, 10); // 等同于重新分配了空间 D = (int*)realloc(NULL, 3 * sizeof(int)); // int *D = (int*)malloc(3 * sizeof(int)); printf("%p\t%p\n", A, D); printArr(D, 3); // 等同于释放了内存空间并将指针置为空值 D = (int*)realloc(D, 0); // free(D);D = nullptr; printf("%p\n", D); return 0; } 输出:...