Tag: 间接

为什么我在C中的多维动态分配不起作用?

我一直试图弄清楚我在C中分配和使用多维动态分配数组的问题。我真的很感激任何帮助。 我尝试了两种方法。 首先: cdr = (double ***) malloc(NUM_REGIONS * sizeof(double **)); for(i=0; i<NUM_REGIONS; i++){ cdr[i] = (double **) malloc(numRatings * sizeof(double *)); for(j=0; j<numRatings; j++){ cdr[i][j] = (double *) malloc(remQuarters * sizeof(double)); } } 第二个: tempPtr1 = (double *) malloc(NUM_REGIONS * numRatings * remQuarters * sizeof(double) ); tempPtr2 = (double **) malloc (NUM_REGIONS * numRatings […]

C中有指针声明的约定吗?

在C中声明指针时,有2个(编辑:3)变体: 变式A: int* ptr; 变式B: int *ptr; 变式C: int * ptr; 在A中,间接运算符已附加到该类型。 在B中,间接运算符已预先添加到变量中。 在C中,间接运算符在类型和变量之间自由站立。 声明指针的方式因我阅读的文档类型而异。 一些作者似乎偏好某些变体,其他人则使用几种变体。 我是否正确地假设不同变体之间的function没有区别? 如果是,是否存在一个变量应该在C中使用的约定?

C预处理器是否删除了“&*”的实例?

我正在玩gcc并尝试以下代码: int A = 42; int *B = &A; int *C = &*B; 和C == &A ,如预期的那样。 但是当我尝试: int *B = NULL; int *C = &*B; 原来C == NULL ,没有段错误。 所以&*B在取得地址之前实际上并没有取消引用B 我的猜测是预处理器在它们甚至到达编译器之前就剥离了&*和*&实例,因为它们互相否定,但我找不到任何文档来validation这是标准C还是特定于编译器。 预处理器是否会剥离&*和*& ,我可以从任何给定的编译器中获得这种行为吗?