我有以下代码片段来理解指针到特定长度的字符数组的工作,使用以下示例代码。
#include <stdio.h>
int main(){
char sports[5][15] = {
"cricket",
"football",
"hockey",
"basketball"
};
char (*sptr)[15] = sports;
if ( sptr+1 == sptr[1]){
printf("oh no! what is this");
}
return 0;
}
sptr+1
和sptr[1]
如何相等?第一个意味着增加地址,sptr
存储一个,第二个意味着获取值地址存储在sptr + 1
。
答案 0 :(得分:7)
sptr
是指向15
char
数组的指针。在使用sports
初始化后,sptr
指向sports
数组的第一个元素"cricket"
。
sptr + 1
是指向sports
的第二个元素的指针,"football"
和sptr[1]
相当于*(sptr + 1)
,它是{{1}的第一个元素的指针,即
"football"
自pointer to an array and pointer to its first element are both equal in value起,sptr + 1 ==> &sports[1]
sptr[1] ==> &sports[1][0]
提供sptr+1 == sptr[1]
值。
请注意,尽管true
和sptr+1
具有相同的地址值,但它们的类型却不同。 sptr[1]
的类型为sptr+1
,char (*)[15]
的类型为sptr[1]
。
答案 1 :(得分:1)
虽然取消引用指针编译器会这样做,
a[i] == *(a+i);
您可以使用printf语句验证这一点。
printf("%p\n",sptr[1]);
printf("%p\n",sptr+1);
请参阅此link.