【发布时间】:2017-06-01 08:54:18
【问题描述】:
我有一个非常奇怪的指针示例,需要您的帮助。通常,指针用于指向变量(参见下面的第一个示例),但当它指向数组时。我不明白为什么它不再需要延迟来获取数组(参见下面的第二个示例)
printf("TEST: %i\n", x[i]);// I expect this should be *x[i]
这确实很奇怪。它只是一个 C 约定还是你如何解释这个?
编辑::由于很多人都提供了明确的答案,我想包括另一个小的后续问题,因为你们都提到了 x[i] = *(x+i),那么x[i][j] 用于二维数组?它相当于什么?是否需要取消引用?
普通变量
int j = 4;
int* pointerj=&j;//pointerj holds address of j or points to j
printf("%d",*pointerj); returns the value that pointer j points to
使用数组:
#include <stdio.h>
#include <stdlib.h>
int *function(unsigned int tags) {
int i;
int *var;
var = (int*)malloc(sizeof(int)*tags); // malloc is casted to int* type , allocated dynamical memory, it returns a pointer!
//so now var holds the address to a dynamical array.
for (i = 0; i < tags; i++) {
var[i] = i;
}
return var;
}
int main() {
int *x;
int i;
x = function(10);
for (i = 0; i < 10; i++) {
printf("TEST: %i\n", x[i]);// I expect this should be *x[i]
}
free(x); x = NULL;
return 0;
}
【问题讨论】:
-
x[i]等价于*(x + i)。所以实际上,这意味着可以将*x写成x[0]。 -
你可能想检查this
-
@OliverCharlesworth 哦!作为一个python程序员,我完全被这个约定误导了!!干杯
-
一个后续问题是多维数组的 x[i][j] 怎么样?是否等价于*(x+i+j)?
标签: c arrays pointers dereference pointer-arithmetic