下面的代码是程序的一部分。我不知道如何理解if(!conn)
和if(!conn->db)
。这不是一个明显的条件,我的意思是不像if(a==b)
。如何理解if语句中的这种情况?
然后任何人都可以帮我理解这种if statement
它是英文吗?预先感谢您的答案!所有的
struct Connection *Database_open(const char *filename, char mode)
{
struct Connection *conn = malloc(sizeof(struct Connection));
if(!conn)die("Memory error");
conn->db = malloc(sizeof(struct Database));
if(!conn->db) die("Memory error");
if(mode == 'c')
{
conn -> file = fopen(filename, "w");
}
else{
conn -> file = fopen(filename, "r+");
if(conn->file){
Database_load(conn);
}
}
if(!conn -> file) die("Failed to open the file");
return conn;
}
- >是指定一个指针(指向一个对象),然后使用'。 '的运算符 –
'if(!conn-> db)'表示与if(conn-> db == 0)或if(conn-> db == NULL)相同。有些人喜欢速记;个人而言,我不会在我的代码中使用它。你还可以找到'if(conn-> db)',它相当于'if(conn-> db!= 0)'。它与'0'比较时可与任何数字或指针类型一起使用;如果你理智,你只能用NULL来比较指针。还要注意,在'f(!conn - > file)'中,箭头' - >'(或点'.')运算符的空格完全不合适。箭头和点运算符结合得非常紧密;不应该被空间包围。 –
'if(!conn)die ...'表示连接是否为假,然后死亡。这只是一个布尔条件。它仍然评估为真或假,只是写法不同而已。 –