解除引用的指针可以指向与指针本身相同的地址吗?

时间:2016-08-16 17:52:21

标签: c pointers

我已经编写了以下代码,但我不明白它是如何运作的。

#include "stdio.h"

typedef struct {
    char s[100];
} MyStruct;

void teste(MyStruct *mS) {
    scanf("%s", mS->s);
    printf("%s\n", mS->s);

    scanf("%s", &(mS->s));
    printf("%s\n", mS->s);

    printf("%p\n", mS->s);
    printf("%p\n", &(mS->s));
}

int main(void) {
    MyStruct a;
    teste(&a);
    return(0);
}

编译时,我得到(预期)警告:

gut.c: In function ‘teste’:
gut.c:11:8: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘char (*)[100]’ [-Wformat=]
    scanf("%s", &(mS->s));

但是,当我运行代码时,mS->s&(mS->s)表现得与他们相等!

aaa
aaa
bbb
bbb
0x7ffc0fab39c0
0x7ffc0fab39c0

指针和它的解除引用版本实际上都是相同的!这是怎么发生的?这是未定义的行为吗?我使用的是GCC 5.3.1,唯一的标志是-Wall

提前多多感谢!

0 个答案:

没有答案