在C语言中,“int *p”有两种解释。您可以将P视为指向单个整数的指针,但也可以将其视为指向整数数组的指针。
一个常见的例子是字符串。
char *a =“hello”;
“a”被视为指向单个字符'h'的指针,但更常见的是将其视为指向字符数组(即字符串)的指针。
因此,您可以这样做:
char * a = new char [6];
strcpy(a,“hello”);
我认为您的第三个示例不是有效的C++。
而这个:
p = new int [9][3][4];
分配了一个由9个二维数组组成的3x4数组。
尝试这个测试:
int test()
{
int(* p)[3][4] = new int[1][3][4];
printf("sizeof(p)=%d, sizeof(*p)=%d\n", sizeof(p), sizeof(*p) / sizeof(int));
size_t q1 = (size_t)&p[0][0][0];
size_t q2 = (size_t)&p[1][0][0];
printf("p, diff: %d\n", (q2 - q1) / sizeof(int));
size_t r1 = (size_t)&p[0][0][0];
size_t r2 = (size_t)&p[0][1][0];
printf("p, diff: %d\n", (r2 - r1) / sizeof(int));
size_t s1 = (size_t)&p[0][0][0];
size_t s2 = (size_t)&p[0][0][1];
printf("p, diff: %d\n", (s2 - s1) / sizeof(int));
return 0;
}