诡异的数组用法
来源:互联网 发布:ubuntu下制作启动u盘 编辑:程序博客网 时间:2024/05/19 00:49
#include <stdio.h>
#include <string.h>
void fun(char c[])//传递的是数组,貌似和引用没区别,唯一的差别就是当c数组为const的时候,调用这个的时候直接用(char*)强转。
{
printf("%d\n" , sizeof(c));
c[0] = 'm';
c[1] = 'f';
}
void fun2(char &c) //传的是第一个值得引用
{
printf("%d\n" , sizeof(c));
c++;
printf("%c%d",c,111);
}
void fun3(char(&c)[9]) //传的是数组的引用,如果c为const,则不能用(char*)强转,类型不匹配
{
printf("%d\n" , sizeof(c));
c[0] = 'x';
}
int main()
{
/* const */char c[] = "12345678";
// char *c = "12345678";
printf("%d\n" , sizeof(c));//9
fun(/*(char*)*/c);
printf("%s\n",c);
fun2(*c);
printf("%s\n",c);
fun3(c);
printf("%s",c);
return 0;
}
- void print(const unsigned short (& r)[5]) {
- cout << "sizeof(r): " << sizeof(r) << endl;
- for (size_t i = 0; i < sizeof(r) / sizeof(r[0]); ++i) {
- cout << r[i] << endl;
- }
- }
- int main() {
- const unsigned short a[] = { 11, 22, 33, 44, 55 };
- print(a);
- }
void print(const unsigned short (& r)[5]) { cout << "sizeof(r): " << sizeof(r) << endl; for (size_t i = 0; i < sizeof(r) / sizeof(r[0]); ++i) { cout << r[i] << endl; }}int main() { const unsigned short a[] = { 11, 22, 33, 44, 55 }; print(a);}
讲引用传入之后 也就讲数组的所有信息传入了, 可以用这样的方法把数组的大小来传入,
可是这样子还是很不好办,因为要是为每个长度的数组都写一个这样的函数,那我们就累都累死了..
该怎么办呢, 对了 我们想到了一个好的方法 模板
- template <typename T, size_t N> void print(const T (& r)[N]) {
- for (size_t i = 0; i < N; ++i) {
- cout << r[i] << endl;
- }
- }
- int main() {
- const int c[] = { 1, 2, 4, 8 };
- print(c);
- const double d[] = { 3.14159, 2.71828, .57722 };
- print(d);
- }
template <typename T, size_t N> void print(const T (& r)[N]) { for (size_t i = 0; i < N; ++i) { cout << r[i] << endl; }}int main() { const int c[] = { 1, 2, 4, 8 }; print(c); const double d[] = { 3.14159, 2.71828, .57722 }; print(d);}
好的, 这样子看起来问题已经得到了很好的解决
可是熟悉模板的人一看就看出来问题了:如果这个函数的长度比较大,那么我们还是会在编译的时候为每个长度的数组创建一个函数,生成文件的大小还是会比较大,这么该怎么办呢?联想到了type_trails, 我们也可以做一个差不多的东西
- template <typename T, size_t N> size_t length(const T (&)[N]) {
- return N;
- }
template <typename T, size_t N> size_t length(const T (&)[N]) { return N;}
代码简单,尽量减少了需要的大小,应该来说是最好的解决方案了。为什么要说应该来说呢吗因为我们没用到STL 如果用到STL 中的Vector, 那么这么多事情我们也就不用来了。 呵呵
- 诡异的数组用法
- c的诡异用法
- 诡异的多维数组传递
- 诡异的JS数组长度
- 诡异的代码之数组越界造成的死循环
- amfphp的一个诡异的问题!数组移位
- 两道“诡异”的数组越界问题的分析
- 好的事情诡异诡异诡异诡异英语
- 数组长度判断时出现的诡异问题总结
- 字符串指针和字符数组的诡异问题
- 关于Java数组越界的一个诡异问题【leetcode204】
- 从 V8 源码看 JS 数组排序的诡异问题
- TimeQuest约束外设之诡异的Create Generated Clocks用法
- TimeQuest约束外设之诡异的Create Generated Clocks用法
- 很诡异的Groovy
- 诡异的C程序
- 诡异的MSN
- 诡异的测试
- VC++6.0下载,个人觉得很好
- linux之守护进程
- asp.net 自定义服务器控
- 窗口线程是由消息线程发展出来的
- 逻辑性强,其实是个致命的弱点
- 诡异的数组用法
- Android 执行shell脚本
- MyEclipse快捷键大全---JAVA
- 软件测试工具比较
- C++ 中的string
- SuSE linux 配置XDMCP
- 虚拟机安装好ubuntu之后的问题
- 如何写好数学建模竞赛答卷
- 2011 09 04 第一周 周总结