c++牛客网刷题 day3

来源:互联网 发布:宽带多重网络怎么回事 编辑:程序博客网 时间:2024/06/03 12:54

- C语言中,逗号优先级最低

- “C程序中的#include和#define均不是C语句” 是正确的


- 指针形参:函数中可以改变指针指向的值,但是不会改变指针自己的地址

EX:

void reset(int *p)

{

p = 0; // p指针值的改变仅限于局部

*p = 0; //p指向的值会改变

}

main()

{

int i = 42;

int *ip = &i;

reset(ip);

}

⚠️ 普通形参加不加const限定符对实参没有影响,引用形参和指针形参前面没有const限定符时,实参必须是非const的,而前面有const限定符时对实参也没有什么影响。

为什么会出现这种情况?

原因在于实参的传递方式不同,函数中的形参是普通形参的时,函数只是操纵的实参的副本,而无法去修改实参,实参会想,你形参反正改变不了我的值,那么你有没有const还有什么意义吗?引用形参和指针形参就下不同了,函数是对实参直接操纵,没有const的形参时实参的值是可以改变的,这种情况下怎能用函数来操纵const实参呢。

我一直这样记忆:“对于变量的约束,允许加强,当绝对不能削弱.....”
例如:实参是const,那么形参如果是非const意味着可以在函数体中改变形参的值,使约束削弱了所以不行。对于使用&,自然也是这个道理。同样的,指针里面的const也是这个样子的,如果让非const指针指向了const对象的地址,那么必然是无法通过编译的,因为如果这样做了,意味着可以通过这个指针改变本该是const的值了,显然是使约束削弱了



----------
if(x=0)
这个是把x赋值为0再判断,这个if永远不会成立
if(x==0)这个是判断x是不是等于0的
if(0<x<1)
这个表达式是先让0和x比较
0<x这个表达式的值不是0就是1
然后再用这个结果和1比较
if(x>0&&x<1)这个才是判断x是不是在0和1之间的


- %取余; /得到结果(为整数)


- 在switch语句中,“case 常量表达式”只相当于一个语句标号, 表达式的值和某标号相等则转向该标号执行,但不能在执行完该标号的语句后自动跳出整个switch 语句,所以出现了继续执行所有后面case语句的情况。


- 此题看不懂,先马克:链接:https://www.nowcoder.com/questionTerminal/2fd94d94ccca407dbc82e705c1f1ecbc
来源:牛客网

下面程序应该输出多少?
1
2
3
4
5
6
7
8
9
10
11
12
char *c[] = { "ENTER","NEW", "POINT","FIRST" }; 
char **cp[] = { c+3, c+2, c+1, c }; 
char ***cpp = cp; 
 
int main(void)
    printf("%s", **++cpp); 
    printf("%s", *--*++cpp+3); 
    printf("%s", *cpp[-2]+3); 
    printf("%s\n", cpp[-1][-1]+1); 
    return0;
}

  • POINTERSTEW
  • FERSTEPOINW
  • NEWPOINTW
  • POINTFIREST

- fork(): 参看linux中fork()函数详解(原创!!实例讲解)
http://blog.csdn.net/jason314/article/details/5640969

原创粉丝点击