数组始终使用从0开始的索引。
例如:
int my_arr[] = { 10, 11, 12, 13, 14, 15 };
意味着数组my_arr具有从索引0开始直到6-1 6个元件(5)。所以,一个N元素数组的索引从0到N-1。另外请注意,my_arr本身也是一个指向数组的指针。
限定INT指针:
int *iPtr = my_arr; // note that we do not use &my_arr here. my_arr is already a pointer to the array it defined.
或
int *iPtr;
iPtr= my_arr;
它们是相同的。
在图中,框所代表的价值和它们的地址除了框写入。
当您使用变量i
作为索引遍历数组时。你基本上做间接如下:
i = 0
my_arr[i]
是相同
my_arr[0]
是相同
*(my_arr + 0)
是一样的(替代命名my_arr框的值)
*(20014000+0)
*运算符让你的VA在此示例中的地址0x20014000
处为10
。
上述操作也一样
iPtr[0] or *(iPtr+0)
看看命名iPtr
盒子,它也包含相同的值0x20014000
。
现在,让我们定义一个指针数组:
int *myptr_arr[3];
int varA = 25;
int varB = 34;
int varC = 67;
myptr_arr[0] = &varA; // note that varA is not a pointer, to get its address use &
myptr_arr[1] = &varB; // note that varB is not a pointer, to get its address use &
myptr_arr[2] = &varC; // note that varC is not a pointer, to get its address use &
再次,当你写myptr_arr[0]
将其转换为
*(myptr_arr + 0)
*(20152000 + 0)
这将让你0x20162000
即价值框名为[0]
=地址varA
。现在要获取此地址的值,您需要使用*
运算符对其进行解引用。
*myptr_arr[0]
其是相同* (*(myptr_arr + 0))
其是相同*(0x20162000)
这是框varA
的值,请参见:Example usage of pointers
'ST [I]'是'字符*',或一个指向角色的指针。 '&str'是一个char(*)[120]',或者一个指向120个字符数组的指针。注意那些是不同的。 – immibis
所以我需要改变&str str,当我这样做时,我得到了这个:12 ! ! –
'int i = 0;'..'st [i] = strdup( str);''if(i == 2)'..'for(i = 0; i <2; i ++){' – BLUEPIXY