如何指向字符数组的行为?

时间:2015-02-21 12:06:26

标签: c pointers multidimensional-array

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

#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

2 个答案:

答案 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]值。

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

答案 1 :(得分:1)

虽然取消引用指针编译器会这样做,

a[i] ==  *(a+i);

您可以使用printf语句验证这一点。

printf("%p\n",sptr[1]);
printf("%p\n",sptr+1);

请参阅此link.