温州市建设小学网站首页,视频网站模板源码,pc网站如何转为手机版,大连比较好的建站公司目录
编辑
1. 范围for
2. nullptr 1. 范围for
我们在写C语言循环遍历代码的时候#xff0c;无论是用 for循环#xff0c;while循环都需要考虑循环的起始条件#xff0c;循环变量的递增逻辑#xff0c;循环的结束条件。麻烦不说还可能会出错。
int main()
{int arr[]…
目录
编辑
1. 范围for
2. nullptr 1. 范围for
我们在写C语言循环遍历代码的时候无论是用 for循环while循环都需要考虑循环的起始条件循环变量的递增逻辑循环的结束条件。麻烦不说还可能会出错。
int main()
{int arr[] { 1, 2, 3, 4, 5 };for (int i 0; i sizeof(arr) / sizeof(arr[0]); i){cout arr[i] ;}cout endl;
}
为了简化单纯做遍历操作时的代码C引入了一个名叫范围for的东东就是一个语法糖。
有了范围for我们遍历arr数组就可以这样书写代码
int main()
{int arr[] { 1, 2, 3, 4, 5 };for (int e : arr){cout e ;}cout endl;
} 无论如何是比直接些for循环舒服多了。
我们来看看语法 for循环后的括号由冒号“ ”分为两部分第一部分是范围内用于迭代的变量 第二部分则表示被迭代的范围。 在数组中被迭代的范围就是数组第一个元素到最后一个元素。如果是其他的数据结构比如stl中的list等等底层都是使用迭代器来实现的。(迭代器我们后面才会讲解哦先随便看看吧)
int main()
{listint l; //双向的链表l.push_back(1);l.push_back(2);l.push_back(3);l.push_back(4);l.push_back(5);for (int e : l){cout e ;}cout endl;
} 范围for括号的最前面是容器里面元素的类型你如果不想写可以用去偷关键字替代。像下面的代码这样就更加方便了。
int main()
{int arr[] { 1, 2, 3, 4, 5 };for (auto e : arr){cout e ;}cout endl;
}
2. nullptr
我们思考一下为什么C语言有NULL了为什么C还要引入nullptr呢座位面试的常考题大家可要仔细想一想。
NULL实际是一个宏在传统的C头文件(stddef.h)中可以看到如下代码
#define NULL ((void *)0) 他是将0强制转化为了无类型的指针使得NULL可能存在多种定义到底是0呢还是个无类型的指针呢让我们看看下面的代码
void f(int)
{cout f(int) endl;
}void f(int*)
{cout f(int*) endl;
}int main()
{f(0); //f(int)f(NULL); //f(int)f((int*)NULL); //f(int*)return 0;
}
f(NULL)调用的函数是不是很奇怪我们本来是想让他调用f(int*)的但是由于NULL的定义导致程序背离了我们的意图。这就是NULL的缺陷。 在C98中字面常量0既可以是一个整形数字也可以是无类型的指针(void*)常量但是编译器默认情况下 将其看成是一个整形常量如果要将其按照指针方式来使用必须对其进行强转(void *)0。 于是C引入了nullptr关键字注意是关键字。nullptr是一个空指针类型仅仅使用nullptr表示空指针。而NULL却可以代表0。 注意 1. 在使用nullptr表示指针空值时不需要包含头文件因为nullptr是C11作为新关键字引入的。 2. 在C11中sizeof(nullptr) 与 sizeof((void*)0)所占的字节数相同。 3. 为了提高代码的健壮性在后续表示指针空值时建议最好使用nullptr。