C中的值赋值

时间:2014-07-13 14:21:29

标签: c

这是一个基本的C编程问题

以下声明有何作用?

int * doorptr, * doorlimit = is_open + NUM_DOORS;

我认为它为* doorptr和doorlim分配了相同的值,所以我尝试打印以下内容以查看:

#include <stdio.h>

#define NUM_DOORS 100

int main(int argc, char *argv[]){

    int is_open[NUM_DOORS] = { 0 };
    int * doorptr, * doorlimit = is_open + NUM_DOORS;

    printf("doorptr: %p\n doorlimit: %p\n", doorptr, doorlimit);
    printf("*doorptr: %d\n *doorlimit: %d\n", *doorptr, *doorlimit);

    return 0;
}

但输出是:

doorptr: 0xb777ec20
doorlimit: 0xbf86c0d0
*doorptr: 0
*doorlimit: -1217134592

3 个答案:

答案 0 :(得分:4)

int * doorptr, * doorlimit = is_open + NUM_DOORS;

以上陈述意味着

int * doorptr;
int * doorlimit = is_open + NUM_DOORS;

分配仅针对doorlimit.进行,因此您不会为两者获取相同的值。

答案 1 :(得分:2)

这使变量doorptr保持未初始化状态。碰巧在你的测试中,doorptr的值是指向某个地方或其他地方的有效指针,但总的来说可能发生任何事情。

将两个变量初始化为相同的值将不适合该语言的其余部分:它只能在这里有意义,因为这两个变量碰巧具有相同的类型。

确保在编译器上激活有用的警告。如果在未初始化的情况下使用变量,任何中途正常的编译器都会发出警告。

答案 2 :(得分:1)

在此声明中

int * doorptr, * doorlimit = is_open + NUM_DOORS;  

doorptr未初始化。初始值设定项仅初始化doorlimit。有趣的是,您的程序会调用未定义的行为,因为您正在取消引用未初始化的指针doorptrdoorlimit指向单位化的位置。