这是一个基本的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
答案 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
。有趣的是,您的程序会调用未定义的行为,因为您正在取消引用未初始化的指针doorptr
,doorlimit
指向单位化的位置。