C和C++中的区别
C语言中的指针来传递参数和C++中&来引用参数的区别
在C语言中指针支持
(1)函数的地址调用
(2)动态分配内存
(3)数组的地址引用
#include <stdio.h>
void swap(float *m,float *n) //这是在函数调用的时候加*
{ // 在C语言中的调用只能是 *加形参
float t;
t=*m; // 要对内容改变时需要加*来使他的值改变(否则不会改变他们在传递时值不会被保留)
*m=*n;
*n=t;
}
int main()
{
float a,b,*p1,*p2;
scanf("%f%f",&a,&b);
p1=&a; p2=&b;
swap(p1, p2);
printf ("%f\n%f\n",a,b);
return 0;
}
在c++中参数的引用可以直接使用&
c++中指针引用可以
(1)除了调用值(这个值是实参的值)还可以返回被操作的结果;
(当有多个值被改变时&就可以省去很多小细节)
#include <iostream.h>
void swap(float& m,float& n)
{
float temp;
temp=m; //这里改变时不用再写 * ;
m=n;
n=temp;
}
int main()
{
float a,b;
cin>>a>>b;
swap(a,b);
cout<<a<<endl<<b<<endl;
return 0;
}
总结 这里的&引用是可以使子函数有更多的返回值 return只能返回一个状态或参数
在数据结构中可以使多个变量的改变
引用类型作参数的三点说明
(1)传递引用给函数与传递指针的效果是一样的,形参变化实参也发生变化。
(2)引用类型作形参,在内存中并没有产生实参的副本,它直接对实参操作;而一般变量作参数,形参与实参就占用不同的存储单元,所以形参变量的值是实参变量的副本。因此,当参数传递的数据量较大时,用引用比用一般变量传递参数的时间和空间效率都好。
(3)指针参数虽然也能达到与使用引用的效果,但在被调函数中需要重复使用“*指针变量名”的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处,必须用变量的地址作为实参。
C语言的头文件
#include<stdio.h>
#include<string.h>
{
strlen
strcat //eg 可以AABCD变成AABCDAABCD
strcpy //复制到另一个字符串里
stramp //比较字符串的大小(“abc”比"d"小返回负值,相等返回0,大于返回正值)
}
#include<math.h>
{
sqrt (开方)
log //double log(double x)//以e为底的对数
log10 //double log10 (double x)
exp //double exp(double x) ,e的 x 次方
}
c++头文件
#include<iostream
>
。。 string s1,s2,s;
。 s=s1+s2(意思是把字符串s1和s2拼在一起
sizeof(s)==sizeof(s1)==sizeof(s2)==8
#include<cstring
>
#include<string
> //对字符串的处理
sizeof 和 strlen的 区别
sizeof是操作符,不是函数;求某种对象的大小
strlen 是函数,当遇到‘\0’为止;和c++语言的 _.size一样
当使用size时需用 string s 来定义字符串,strlen是需用char s[ ];
char a[10]
, , ,strlen(a)//结果不确定
, , ,sizeof(a)==10
char a[10]={’\0’};
, , ,stlen(a)==0
, , ,sizeof(a)==10;
char a[]=“lrp”
, , ,strlen(a)==3
, , ,sizeof(a)==4//连‘\0’的空间也算上
char *a=“12345uy”
, , sizeof(a)==8//指针的长度
, sizeof(*a)==1//第一个字符的空间
, strlen(a)==7 //该字符串的长度
在c++中的 <string> 头文件(注意和<cstring>的不同)
<string>是对字符串进行操作 (定义string就是可以对字符串进行操作)
一定要清楚是对什么操作
{
string s; //定义一个字符串
}
(1)
最常用的就是 s.size() , s.length()
(2)
输出或修改字符串中的某个字符 s.at(位置)
(3)
在末尾插入字符串 s.append(“”)
在任意位置插入是 s.insert()
**
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a;
getline(cin ,a);
a.append(" you");
cout<<a<<endl;
a.insert(0,"?/%"); //这也可以是字符串 字符灵活运用
cout<<a<<endl;
return 0;
}
**
输入
I love
输出
I love you
?/%I love you
(4)
比较字符串的大小s1.compare(s2)
与c中的strcmp类似
(5)
cop()
#include<iostream>
#include<string>
using namespace std;
string a;
int main()
{
cin >>a;
char b[10]; //这是char 要不然找不到位置 如果是string不行
a.copy(b,4,0); //这是把a的东西弄到 b 里
cout<<b<<endl;
return 0;
}
(6)
删除字符串中的字符
erase( first,end)
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a;
getline(cin,a);
cout<<a.erase(2,6)<<endl;//删除从1位置开始的三个字符
return 0;
}
(7)
交换两个字符串 swap()
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a,b;
cin >>a;
cin >>b;
a.swap(b);
cout<<a <<endl;
cout<<b ;
return 0;
}
字符串使用
这里C++里面有一个 string 字符串的用法
但是C语言里用字符数组来表示字符串
要求配套使用:
sring s;
cout <<s;
char[N];
printf("%s",char);