C++常用函数总结
定义数组
//动态定义一维数组
int *p1 ;
p1 = new int [row] ;
//输入一维数组的值
for( i = 0 ; i < row ; i ++ )
p1[i] = rand () % 10 ;
//输出一维数组
for( i = 0 ; i < row ; i ++ )
cout<<p1[i] <<' ' ;
cout<<endl;
//动态定义二维数组
int **p2 ;
p2 = new int*[row] ;
for( i = 0 ; i < row ; i ++ )
p2[i] = new int[col] ;
//输入二维数组的值
for( i = 0 ; i < row ; i ++ )
for( j = 0 ; j < col ; j ++ )
p2[i][j] = rand() % 10 ;
//动态定义三维数组:
int *** p3 ;
p3 = new int**[hight ] ;
for( i = 0 ; i < hight ; i ++ )
p3[i] = new int*[row] ;
for( i = 0 ; i < hight ; i ++ )
for( j = 0 ; j < row ; j ++ )
p3[i][j] = new int[col] ;
//输入三维数组值:
for(i = 0 ; i < hight ; i ++ )
for(j = 0 ; j < row ; j ++ )
for( k = 0 ; k < col ; k ++)
p3[i][j][k] = rand()%10 ;
指针
#include <iostream>
using namespace std;
void swap1(int p,int q) //不改变实参的数值
{
int temp;
temp = p;
p = q ;
q = temp;
}
void swap2(int *p,int*q) //编译器会报错
{
int *temp;
*temp = *p;
*p = * q;
*q = *temp;
}
void swap3(int *p,int *q) //不会改变实参的数值
{
int *temp;
temp = p ;
p = q;
q = temp;
}
void swap4(int *p,int *q) //改变实参的数值
{
int temp;
temp = *p;
*p = *q;
*q = temp;
}
void swap5(int &p,int &q) //改变实参的数值
{
int temp;
temp = p;
p = q;
q = temp;
}
int main(){
int a,b;
swap1(a,b);
//swap2(&a,&b);
//swap3(&a,&b);
//swap4(&a,&b);
//swap5(a,b);
cout<<a<<" "<<"b"<<endl;
return 0;
}
2.swap2(&a,&b)传的是一个地址进去,在函数体内的形参p和q是指向了实际参数a,b的内存地址的指针
要注意!
int *temp;
*temp = *p;
3.swap3(a,b)传的是一个地址过去,与swap2不同的是
*temp = * p ;//swap2 赋值
temp = p; //swap3 指向
/*swap2和swap3同样都没给temp指针分配内存
*不同的是以上这两段代码。temp=p是指向,而不是复制了,temp是指向了p指针所指向的地址,也就是a
*/
而代码
p = q;
q = temp;
/*其意思就是指针p指向了指针q所指向的地址,q又指向了指针temp所指向的地址,其实和temp=p是一个意思;
如下图所示
4.swap4,修改了指针所指向的地址中的值
int *temp;
temp = *p;
*p = *q;
*q = temp;
将指针p所指向的地址的值赋值给temp指针所指向的地址,*p=q,就是q指针所指向的地址赋值给指针p所指向的地址中的值,所以指针p所指向的a(地址)中的值就变成了b(b是q指针所指向的地址),同理指针temp所指向的地址就赋值给了q指针所指向的地址中的值,也就是说将最初p指针所指向的地址的值赋值给了q指针所指向的地址的值。没毛病,其实交换的本质就是这样的:最初的p的值要换成q的值,而q的值要换成最初p的值,所以只是将最初p的值给临时保存下来。
5.swap5和swap4是类似的。是一个引用传递,修改的结果直接影响实参。
void swap5(int &p,int &q){
int temp = p;
p = q;
q = temp;
}
所谓的引用传递就是指在调用函数的时候,将实参的地址传递到函数中,那么在函数中对参数所进行的修改,将会影响到实际的参数.将一个变量引用传递给函数,这样该函数就可以修改其参数(变量)的值。因为实参和形参引用了同一个地址,所以如果改变了形参的值,那么实参的值也将会发生变化。
引用传递参数
#include <iostream>
using namespace std;
void swap(int & a,int & b)
{
int tmp;
tmp=a;
a=b;
b=tmp;
}
void main()
{
int x,y;
cout << "请输入x" << endl;
cin >> x;
cout << "请输入y" << endl;
cin >> y;
cout<<"通过引用交换x和y"<<endl;
swap(x,y);
cout << "x=" << x <<endl;
cout << "y=" << y <<endl;
}
运行结果1
指针传递参数
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
swap(int *a,int *b)
{
int tmp;
tmp=*a;
*a=*b;
*b=tmp;
}
void main()
{
int x,y;
int *p_x,*p_y;
cout << " input two number " << endl;
cin >> x;
cin >> y;
p_x=&x;p_y=&y;
if(x<y)
swap(p_x,p_y);
cout << "x=" << x <<endl;
cout << "y=" << y <<endl;
}
运行结果如下
C++函数调用分析
#include <stdio.h>
int func(int param1 ,int param2,int param3)
{
int var1 = param1;
int var2 = param2;
int var3 = param3;
printf("var1=%d,var2=%d,var3=%d",var1,var2,var3);
return var1;
}
int main(int argc, char* argv[])
{
int result = func(1,2,3);
return 0;
}
二进制进行移位(十六进制也可以)
char 8位
short int 16位
char a,b;
short int c;
a = 10; b= 3;
c = a;
c <<= 8;
c &=b;
// a = 1111,b=0011
//c = 1111 0000 =>1111 0011
如果一个函数需要返回多个参数,可以采用以下两种方法:
第一种方法是将返回值作为写参数。
#include <iostream>
#include <string>
using namespace std;
void fun(int &a, char &b, string &c)
{
a = 1;
b = 'b';
c = "test";
}
int main()
{
int a;
char b;
string c;
fun(a,b,c);
cout << a << " " << b << " " << c << endl;
}
第二种方法是定义一个结构,返回指向该结构的指针。
#include <iostream>
#include <string>
using namespace std;
struct result
{
int a;
char b;
string c;
};
result * fun()
{
result *test=new result;
test->a = 1;
test->b = 'b';
test->c = "test";
return test;
}
int main()
{
result *test;
test=fun();
cout << test->a << " " << test->b << " " << test->c << endl;
delete test;
return 1;
switch和case语句:
#include <stdio.h>
int main(){
int a;
printf("Input integer number:");
scanf("%d",&a);
switch(a){
case 1: printf("Monday\n"); break;
case 2: printf("Tuesday\n"); break;
case 3: printf("Wednesday\n"); break;
case 4: printf("Thursday\n"); break;
case 5: printf("Friday\n"); break;
case 6: printf("Saturday\n"); break;
case 7: printf("Sunday\n"); break;
default:printf("error\n"); break;
}
return 0;
}
printf()函数中的格式串格式为:
[标志][输出最小宽度][.精度]类型。 其中:方括号[]中的项为可选项。
-
类型
类型字符用以表示输出数据的类型d 以十进制形式输出带符号整数(正数不输出符号)
o 以八进制形式输出无符号整数(不输出前缀0)
x,X 以十六进制形式输出无符号整数(不输出前缀Ox)
u 以十进制形式输出无符号整数
f 以小数形式输出单、双精度实数
e,E 以指数形式输出单、双精度实数
g,G 以%f或%e中较短的输出宽度输出单、双精度实数
c 输出单个字符
s 输出字符串
2)标志
标志字符为 -、+、#
- 结果左对齐,右边填空格
+ 输出符号(正号或负号)
#对o类,在输出时加前缀o; 对x类,在输出时加前缀0x;
- 输出最小宽度
用十进制整数来表示输出的最少位数。若实际位数多于定义的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或0(当最小宽度数值以0开头时)。 - 精度
精度格式符以“.”开头,后跟十进制整数。本项的意义是:如果输出数字,则表示小数的位数;如果输出的是字符,则表示输出字符的个数;若实际位数大于所定义的精度数,则截去超过的部分。
综合以上,可以看出,%04x 表示按16进制输出数据,最小输出宽度为4个字符,右对齐,如果输出的数据小于4个字符,前补0,如:
printf("%04x", 100 ); //输出0064 100的16进制数是64
//STM32单片机中参考例文
wf =(ww * 4096 + mm * 256+ uu * 16 + vv) / 256.0;
sprintf((char*)shou,"%0.3f",wf);
LCD_Fill(230,310,430,326,WHITE);
LCD_ShowString(230,310,200,16,16,shou);
ubuntu下如何运行c++
用下面的命令运行该first.cpp文件:
g++ first.cpp -o test
./test
windows下VS2015运行c
https://www.cnblogs.com/yankyblogs/p/7058036.html
参考文献:
向以下文章发布者表示感谢
返回多个值:https://blog.csdn.net/onlyou2030/article/details/48174461
函数调用:https://www.cnblogs.com/biyeymyhjob/archive/2012/07/20/2601204.html
二进制十六进制移位:https://bbs.csdn.net/topics/392005545?_u_u_u=0.4370113343466073
指针传递动态参数:https://blog.csdn.net/sinat_35803474/article/details/76686061