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

Old*_*ool 5 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;
}
Run Code Online (Sandbox Code Playgroud)

如何sptr+1sptr[1]可以相等?因为第一个意味着增加地址,它sptr由一个存储,第二个意味着获取存储在其中的地址的值sptr + 1.

hac*_*cks 7

sptr是一个指向15 chars 数组的指针.初始化后sports,sptr指向sports数组的第一个元素"cricket".

sptr + 1是指向第二元件sports,其是"football"sptr[1]相当于*(sptr + 1)其是指针的第一个元素"football",即

sptr + 1 ==> &sports[1] 
sptr[1]  ==> &sports[1][0]   
Run Code Online (Sandbox Code Playgroud)

由于指向数组的指针和指向其第一个元素的指针的值都相等,因此sptr+1 == sptr[1]给出true值.

需要注意的是,虽然sptr+1sptr[1]他们的类型是不同的同一地址的值.sptr+1是类型char (*)[15]sptr[1]类型char *.