文章目录
1.getline
1.1.用法一
#include <iostream>
using namespace std;
int main()
{
string str;
getline(cin,str);
cout<<"str:"<<str<<endl;
}
执行结果:
root@host:/home/LinuxShare/004.c++/day07# g++ main.cpp
root@host:/home/LinuxShare/004.c++/day07# ./a.out
zxcvbnm,.
str:zxcvbnm,.
1.2.用法二
#include <iostream>
using namespace std;
int main()
{
char line[200];
cin.getline(line,200);
cout<<"line:"<<line<<endl;
}
执行结果:
root@host:/home/LinuxShare/004.c++/day07# g++ main.cpp
root@host:/home/LinuxShare/004.c++/day07# ./a.out
tyuionm,
line:tyuionm,
2.输入一串字符,统计每个字符个数
#include <iostream>
using namespace std;
int main()
{
string str;
cout<<"input some text:";
getline(cin,str);
int cnt[256]={};
for(int i=0;i<str.size();i++)
{
//字符的asc码为下标
cnt[(int)str[i]]++;
}
for(int i=0;i<256;i++)
{
//输出
if(cnt[i]!=0)
{
cout<<(char)i<<":"<<cnt[i]<<endl;
}
}
}
执行结果:
root@host:/home/LinuxShare/004.c++/day07# g++ main.cpp
root@host:/home/LinuxShare/004.c++/day07# ./a.out
input some text:qwertyuiqwerty
e:2
i:1
q:2
r:2
t:2
u:1
w:2
y:2
3.常指针(const)
int * const p;
4.指针变量占字节数
指针变量占字节数和系统位数有关。
32位系统,指针占4个字节;
64位系统,指针占8个字节;
#include <iostream>
using namespace std;
int main()
{
int** p = new int*[5]; //申请5个int*类型的空间
cout<<"sizeof(int** p)"<<sizeof(p)<<endl;
//内容
cout<<"p[0]:"<<p[0]<<endl;
cout<<"p[1]:"<<p[1]<<endl;
cout<<"p[2]:"<<p[2]<<endl;
cout<<"p[3]:"<<p[3]<<endl;
cout<<"p[4]:"<<p[4]<<endl;
//地址
cout<<"&p[0]:"<<&p[0]<<endl;
cout<<"&p[1]:"<<&p[1]<<endl;
cout<<"&p[2]:"<<&p[2]<<endl;
cout<<"&p[3]:"<<&p[3]<<endl;
cout<<"&p[4]:"<<&p[4]<<endl;
}
root@host:/home/LinuxShare/004.c++/day07# g++ main.cpp
root@host:/home/LinuxShare/004.c++/day07# ./a.out
sizeof(int** p)8
p[0]:0
p[1]:0
p[2]:0
p[3]:0
p[4]:0
&p[0]:0x55578d54ce70
&p[1]:0x55578d54ce78
&p[2]:0x55578d54ce80
&p[3]:0x55578d54ce88
&p[4]:0x55578d54ce90
5.两个用法比较
指针变量只能放地址。
#include <iostream>
using namespace std;
int main()
{
char buf[]="good";
char const *p = "good";
cout<<"sizeof(buf):"<<sizeof(buf)<<"---"<<buf<<endl;
cout<<"sizeof(p):"<<sizeof(p)<<"---"<<p<<endl;
}
执行结果:
root@host:/home/LinuxShare/004.c++/day07# g++ main.cpp
root@host:/home/LinuxShare/004.c++/day07# ./a.out
sizeof(buf):5---good
sizeof(p):8---good
6.命令行参数
//argc:命令行中字符串个数
//argv[]:指向命令行每个字符串的指针
int main(int argc,char* argv[])
{
}
扩展:
字符串转数值:
atof(字符串); //字符串转成float型数值
atoi(字符串); //字符串转成int型数值
7.引用
rn是n的别名,通过引用实现。r:reference引用
#include <iostream>
using namespace std;
int main()
{
int n=100;
int m = n;
int *p = &n;
//引用、取别名
int& rn =n;
cout<<"&n= "<<&n<<endl;
cout<<"&m= "<<&m<<endl;
cout<<"&p= "<<&p<<endl;
cout<<"&rn="<<&rn<<endl;
}
执行结果:
root@host:/home/LinuxShare/004.c++/day07# g++ main.cpp
^[[Aroot@host:/home/LinuxShare/004.c++/day07# ./a.out
&n= 0x7ffdc13bbcb0
&m= 0x7ffdc13bbcb4
&p= 0x7ffdc13bbcb8
&rn=0x7ffdc13bbcb0
7.1.传参形参使用引用
#include <iostream>
using namespace std;
//普通传参,形参是实参的复制品
void update_1(int m)
{
++m;
}
//形参使用引用
void update_2(int& m)
{
++m;
}
int main()
{
int a=100;
int b=200;
update_1(a); //普通传参
update_2(b); //形参使用引用
cout<<"a:"<<a<<endl;
cout<<"b:"<<b<<endl;
return 0;
}
执行结果:
root@host:/home/LinuxShare/004.c++/day07# g++ main.cpp
root@host:/home/LinuxShare/004.c++/day07# ./a.out
a:100
b:201
8.函数指针
像声明函数一样定义函数指针,不同在于,要把函数名改成(* 指针名)的形式。
#include <iostream>
using namespace std;
void output(int a[],int n);
int main()
{
//函数指针定义
void (*fp)(int a[],int n) = NULL;
int x[5]={1,2,3,4,5};
//给函数指针赋值
fp = output;
output(x,5);
fp(x,5);
return 0;
}
void output(int a[],int n)
{
for(int i=0;i<n;i++)
{
cout<<a[i]<<' ';
}
cout<<endl;
}
执行结果:
root@host:/home/LinuxShare/004.c++/day07# g++ main.cpp
root@host:/home/LinuxShare/004.c++/day07# ./a.out
1 2 3 4 5
1 2 3 4 5