C++ 写函数遍历打印char[]数组的每一个元素
void print_string(char [] str){
for(int i=0; i<sizeof(str)/sizeof(str); i++)
{
cout<<str;
}
cout << endl;
}
int main(void)
{
char arr1 = "Hello world";
print_strin(arr1);
chararr2;
arr2 = 'H';
arr2 = 'e';
arr2 = 'l'
arr2 = 'o'
...
arr2 = 'd';
return 0;
}
输出:Hello wo
那后面rld几个字符去哪里了呢?我感觉问题出在
i < sizeof(arr)/sizeof(arr)这句话,如果这样改就行了
void print_string(char[] arr, int length); // length 是数组的长度
我现在疑惑的是,为啥会打印Hello wo,共8个字节?sizeof(arr)/sizeof(arr)不应该返回数组的长度吗?为啥返回8呢?来个懂得老哥说一下。 当然因为我直到数组的长度,直接
for(int i=0; i<11; i++)
{
cout << arr
}
就行了,输出Hello world,但是我想知道的是,为啥sizeof(arr)/sizeof(arr)返回的是Hello wo呢,刚好是8个字节? @大佬 你这个代码本身运行不了,有很多语法错误 楼上的不要装逼,代码是可以运行的 @真正的大佬 我只是写了有疑惑的部分,为了大家方便观看我在写一遍
...
void print_string(char [] str)
{
for(int i=0; i<sizeof(str)/sizeof(str); i++)
{
cout<<str;
}
cout << endl;
}
整个函数,我想的是遍历一个char[]数组然后逐个打印每个字符,比如Hello,就输出Hello
但是调用整个函数,Hello world(共11个字符),只输出了Hello wo,那后几个字符去哪里了呢?(输出了8个字节) 萌出血 发表于 2020-10-8 12:57
我只是写了有疑惑的部分,为了大家方便观看我在写一遍
...
你得将整个程序发出来,别人才能知道,你的错误出在哪里。你只发片断,没有上下文,叫别人怎么帮你? 风过无痕1989 发表于 2020-10-8 13:39
你得将整个程序发出来,别人才能知道,你的错误出在哪里。你只发片断,没有上下文,叫别人怎么帮你?
#include <iostream>
using namespace std;
void print_string(char str[])
{
for(int i=0; i<sizeof(str)/sizeof(str); i++)
{
cout<<str;
}
cout << endl;
}
int main(void)
{
char arr = "Hello world";
print_string(arr);
return 0;
}
这个输出结果为啥是 Hello wo?sizeof(str) 为啥是8 萌出血 发表于 2020-10-8 15:32
#include
using namespace std;
我用MV++6.0运行你的程序结果如下,不像你说的没输出完,而是连续输出了四次。C++我还没学,发图出来,让其他的朋友来帮助你吧
我搞清楚了,问题出在这里
void print_string(char a[]);
整个函数,传递的a实际上是一个指向数组首地址的指针,和下面的函数声明等价
void print_string(char*);
我是64bit机器,所以指针长度等于8…… 问题解决 风过无痕1989 发表于 2020-10-8 16:58
我用MV++6.0运行你的程序结果如下,不像你说的没输出完,而是连续输出了四次。C++我还没学,发图出来,让 ...
我在终端运行和你一样,也是
code ➤ ./a.out
Hello worldHello worldHello worldHello worldHello worldHello worldHello worldHello world
主要是搞清楚实参和形参的区别……
void print_string(char []);
void print_string(char *s);
这两个声明是等价的。
但是在main函数中,
char s = "Hello world";
这里的s就是指整个数组的名字,sizeof运算后返回该数组的长度等于40
还是很基础的吧 C++真是太有趣了 也就是paraments和arguments的区别 我对Java比较熟悉,Java就不会出现这种问题
因为“Java只有值传递”,这么基础的问题不应该 萌出血 发表于 2020-10-8 17:57
我在终端运行和你一样,也是
code ➤ ./a.out ...
C++我还没学,但C++作为C语言的继承和发展,应该与C语言有诸多的相似和联系。下面就是C语言的开参与实参区别与联系,供参考:
C语言函数的参数会出现在两个地方,分别是函数定义处和函数调用处,这两个地方的参数是有区别的。
形参(形式参数)
在函数定义中出现的参数可以看做是一个占位符,它没有数据,只能等到函数被调用时接收传递进来的数据,所以称为形式参数,简称形参。
实参(实际参数)
函数被调用时给出的参数包含了实实在在的数据,会被函数内部的代码使用,所以称为实际参数,简称实参。
形参和实参的功能是传递数据,发生函数调用时,实参的值会传递给形参。
形参和实参的区别和联系
1) 形参变量只有在函数被调用时才会分配内存,调用结束后,立刻释放内存,所以形参变量只有在函数内部有效,不能在函数外部使用。
2) 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的数据,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参,所以应该提前用赋值、输入等办法使实参获得确定值。
3) 实参和形参在数量上、类型上、顺序上必须严格一致,否则会发生“类型不匹配”的错误。当然,如果能够进行自动类型转换,或者进行了强制类型转换,那么实参类型也可以不同于形参类型。
4) 函数调用中发生的数据传递是单向的,只能把实参的值传递给形参,而不能把形参的值反向地传递给实参;换句话说,一旦完成数据的传递,实参和形参就再也没有瓜葛了,所以,在函数调用过程中,形参的值发生改变并不会影响实参。 哈哈,此帖终结。懂的都懂。
页:
[1]