C/C++常用函数总结以及在ubuntu和vs中运行

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()函数中的格式串格式为:
[标志][输出最小宽度][.精度]类型。 其中:方括号[]中的项为可选项。

  1. 类型
    类型字符用以表示输出数据的类型

    d 以十进制形式输出带符号整数(正数不输出符号)
    o 以八进制形式输出无符号整数(不输出前缀0)
    x,X 以十六进制形式输出无符号整数(不输出前缀Ox)
    u 以十进制形式输出无符号整数
    f 以小数形式输出单、双精度实数
    e,E 以指数形式输出单、双精度实数
    g,G 以%f或%e中较短的输出宽度输出单、双精度实数
    c 输出单个字符
    s 输出字符串

2)标志
标志字符为 -、+、#

   -    结果左对齐,右边填空格
  +   输出符号(正号或负号)
  #对o类,在输出时加前缀o;       对x类,在输出时加前缀0x;   
  1. 输出最小宽度
    用十进制整数来表示输出的最少位数。若实际位数多于定义的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或0(当最小宽度数值以0开头时)。
  2. 精度
    精度格式符以“.”开头,后跟十进制整数。本项的意义是:如果输出数字,则表示小数的位数;如果输出的是字符,则表示输出字符的个数;若实际位数大于所定义的精度数,则截去超过的部分。

综合以上,可以看出,%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

猜你喜欢

转载自blog.csdn.net/RNG_uzi_/article/details/89285787