第1个回答 2012-07-28
ch[]与*ch 在赋值时是一样的
差别就是:
char *s中的s所指向的内容是常量,不允许修改
char s[]中的s是可以修改的
输出p,是输出指针指向的字符串,而保存的是这个字符串的地址本回答被网友采纳
第2个回答 2012-07-28
输入可以用\0 或者用while()
输出可以用指针连续输出,或者还是while
你要是想输出地址就 &P 而不是单纯的P,&为取地址的意思
楼下的错了 是&p 而不是*p=&()
第3个回答 2012-07-28
原因写在下面代码的注释中了。
#include "stdafx.h"
#include "DrdAnalyzer.h"
#include <stdio.h>
#include <conio.h>
#include <iostream>
using namespace std;
void main()
{
// 问题一的解答:实际上,方法一方法二的内部实现,都是方法三。
char ch[20];
// 输入方法一:用cin,从标准输入缓冲区中,将输入的字符流复制到字符数组中
cin >> ch;
// 输入方法二:用scanf函数,从标准输入缓冲区中,将输入的字符流复制到字符数组中
scanf( "%s", ch );
// 输入方法三:用循环的方式,从标准输入缓冲区中挨个读取字符,赋值到字符数据中的每个元素。
for ( int i = 0; ; i++ )
{
ch[i] = getch();
putch( ch[i] ); // 回显
if ( ch[i] == '\r' )
{
ch[i] = '\0';
break;
}
}
// 输出方法一:用cout,将字符数组直接复制到标准输出缓冲区
cout << endl << endl << ch << endl;
// 输出方法二:用printf,将字符数组直接复制到标准输出缓冲区
printf( "%s\n", ch );
// 输出方法三:用循环的方式,将字符数组中的所有的字符,挨个复制到标准输出缓冲区。
for( int i = 0; i < strlen( ch ); i++ )
putchar( ch[i] );
putchar( '\n' );
// 问题二的解答:输出为字符串,而不是地址值的原因是,cout和printf对字符数组有特殊的解释。
char *p = "hello";
// 输出方法一:先输出字符串,再输出地址
cout << p << "," << (int)p << endl;
// 输出方法二:先输出字符串,再输出地址
printf( "%s,%d\n", p, p );
}
第4个回答 2012-07-28
c++是高级语言,cin标准输入流,它会自动处理你的输入流,为什么要用for,高级语言就是高级在这里,更加智能,而且如果每次你都用for不觉得很累吗,这样一个重复的过程并且常用的过程被语言设计者简化到cin,方便程序员。
char *p=“hello“ 典型的c风格字符串定义方式,如果你用cout<<p;cout识别出p,并用合适的方式输出,对于这种情况默认处理是从地址开始的位置(p存放的地址)到字符串结束("hello"字符串结束标志'\0')全部输出
如果想输出p存放的地址就用cout<<(void*)p;,只输出第一个字节就用cout<<*p;
第5个回答 2012-07-29
20是字符串长度的定义,当然输入一个字符串直接输入输出就行了。可能输入有误在看看
第6个回答 2019-03-12
经典解释int
char
a[12][10],
二维数组
有12个行数组,一个内花括号代表一个行数组,行数组以a[0],a[1],a[2]…做数组名,每个行数组有个10元素,例a[i][j]:a[i]是行数组名,a[j]是行数组中的元素a[j]