我有以下代码片段,用于理解指向特定长度的字符数组的指针的工作,并带有以下示例代码。
#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
中的地址。 最佳答案
sptr
是指向15
char
数组的指针。用sports
初始化之后,sptr
指向sports
数组的第一个元素"cricket"
。sptr + 1
是指向sports
的第二个元素(即"football"
)的指针,而sptr[1]
等效于*(sptr + 1)
,它是"football"
的第一个元素的指针,即,
sptr + 1 ==> &sports[1]
sptr[1] ==> &sports[1][0]
由于pointer to an array and pointer to its first element are both equal in value,
sptr+1 == sptr[1]
给出true
值。请注意,尽管
sptr+1
和sptr[1]
具有相同的地址值,但它们的类型却不同。 sptr+1
的类型为char (*)[15]
,sptr[1]
的类型为char *
。关于c - 指向字符数组的指针的行为如何?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28645575/