我有以下代码片段,用于理解指向特定长度的字符数组的指针的工作,并带有以下示例代码。

#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+1sptr[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 valuesptr+1 == sptr[1]给出true值。

请注意,尽管sptr+1sptr[1]具有相同的地址值,但它们的类型却不同。 sptr+1的类型为char (*)[15]sptr[1]的类型为char *

关于c - 指向字符数组的指针的行为如何?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28645575/

10-11 04:03