不同类型数组输出所有元素区别,输出运算符<<对char*的重载,输出字符数组地址 C语言入门

欢迎关注笔者,你的支持是持续更博的最大动力


本文将讨论:

  1. 不同类型数组输出所有元素区别(int[ ] v.s. char[ ] )
  2. 输出运算符 “<<” 对 char* 的重载
  3. 如何输出字符数组地址

回顾

一维数组与指针可了解到:

  • p[n] 与 *(p+n) 等价
  • p是指针,指向数组p的起始地址
  • p的起始地址:p[0]的地址

输出数组元素(int)

假如有一个数组 int p[n];
那么怎么输出数组p的所有元素呢?答:要用到for循环,如下:

for (int i = 0; i < n; ++i)
        cout << p[i] << " "; 

不能直接输出整个数组吗?尝试:

cout << p;

输出结果:十六进制数
也就是p的起始地址值,因为一开始已提到:p是指针,指向数组p的起始地址。

但是,有一个例外:

输出数组元素(char)

运行下面代码:

int main(){
    char name[] = "Jack";      //字符数组name,name类型:char *
    cout << name[1] << endl;
    cout << name << endl;
    return 0;
}

输出结果:
a
Jack

可以发现,对于字符数组,cout可以输出:

  • p[i]:任意元素 (name[1])
  • p:所有元素 (name),不需要for循环

这是为什么呢?

“<<”运算符对char *的重载

原因:输出运算符“<<”对于字符数组char[ ]有重载,这是一个特例,只有字符数组会输出整个数组,如果是int数组或者别的类型数组,则不会。

重载代码如下:

ostream& operator << (ostream& output, char *c)
{
	while (*c != '\0')     //输出'\0'之前的所有字符
	{
		output << *c;
		c = c + sizeof(char);
	}
	return output;
}

那如何输出字符数组p地址?答:
方法1: 强制转换

cout << (void *)p << endl;

解释:1. 将char* 类型的p指针,强制转换为void*(无类型指针); 2. 利用输出运算符“<<”对无类型指针的重载,可以直接输出地址。

或更简单的,用取地址运算符“&”:
方法2:“&”

cout << &p <<endl;

相关内容

其他

日常vlog: 点这里去B站~


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值