cout 输出数组名和字符数组名/ 输出地址,cout对字符数组重载

 

  1. char a[] = {'a','b','c'};

  2. char b[] = "abc";

  3. char c[] = { 'a','b','c','\0'};

  4. int d[] = {1,2,3 };

  5. cout << a << endl;

  6. cout << b << endl;

  7. cout << c << endl;

  8. cout << d << endl;

结果:

分析:

1.以字符串字面量初始化的字符数组cout数组名可以输出整个数组;

2.列表初始化的字符数组必须加上字符串结束符‘\0’才能cout数组名才能正确输出整个数组

3.列表初始化的字符数组没加加‘\0’的话,可以看见字符数组打印出来了,但是后面多了几个字符,因为cout不知道什么时候结束

4.而其他类型的数组,比如int,cout数组名输出的是这个数组的16进制地址,后面会验证这一点。

为什么会出现这种情况呢?不是说数组名代表数组的首地址吗?

因为cout对于cha[]重载了<<运算符呗。

另外强调一点,数组b和c的长度都是4字节。

 

那么我们怎么输出char数组的首地址呢,用printf:

 
  1. printf("%p \n", c);

  2. printf("%p \n",d);

也可以这样:

printf("%p \n", &d[0]);

%p表示以16进制的形式输出。

数组d的地址怎么跟上面不一样,因为这是运行两次的截图。。

--------------------------------------------------

以后遍历数组可以多使用范围for循环,自动检测,节省时间,比如输出上面定义的数组d:

 
  1. for (auto v: d) {

  2. cout << v << " ";

  3. }

  4. cout << endl;

注:这是C++11新特性,vs2010不支持的,我用的vs2015.

  • 8
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于您的问题,C++提供了函数重载的机制,可以根据不同的参数类型和数量,编写同但不同参数列表的函数。对于字符数组和整型数组的逆向存放,可以分别写一个函数,实现两种不同类型的数组倒序存储。具体的代码实现如下: ``` #include <iostream> #include <cstring> using namespace std; void reverse(char *str, int len) { for (int i = 0; i < len / 2; i++) { char temp = str[i]; str[i] = str[len - i - 1]; str[len - i - 1] = temp; } } void reverse(int *arr, int len) { for (int i = 0; i < len / 2; i++) { int temp = arr[i]; arr[i] = arr[len - i - 1]; arr[len - i - 1] = temp; } } int main() { char str[] = "Hello World!"; int arr[] = {1, 2, 3, 4, 5}; reverse(str, strlen(str)); reverse(arr, 5); cout << str << endl; for (int i = 0; i < 5; i++) { cout << arr[i] << " "; } cout << endl; return 0; } ``` 在以上代码中,我们首先定义了两个函数 `reverse`,一个用于字符数组的倒序存储,另一个用于整型数组的倒序存储。在 `reverse` 函数内部,我们使用了类似于冒泡排序的思路,用一个临时变量来交换数组中的元素,从而实现倒序存储。在主函数中,我们分别定义一个字符数组 `str` 和整型数组 `arr`,并调用两个 `reverse` 函数,将它们倒序存储。最后,我们输出倒序存储后的字符数组和整型数组。 需要注意的是,该程序只是演示了 C++ 中字符数组和整型数组的倒序存储实现,实际上还需要进一步的错误处理和边界检查,以确保程序运行的正确性和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值