C++学习笔记day1

1. 函数指针回顾 

1.1 函数指针  

程序运行期间,每个函数都会占用一段连续的内存空间。而函数名就是该函数所占内存区域的起始地址(入口地址)。可以将该地址赋给一个指针变量,使该指针变量指向该函数。然后通过指针变量来调用该函数。这种指向函数的指针变量称为“函数指针”。

1.2 定义形式

类型名(*指针变量名)(参数类型1,参数类型2,....);

例如:int(*pf)(int,char);

表示pf是一个函数指针,它指向一个函数,且该函数的返回值类型为int,该函数有两个参数,第一个是int类型,第二个是char类型。

2. 快速排序函数qsort()

2.1 qsort()函数

void qsort(void *base, size_t nmemb, size_t size, int(*compare) (const void *, const void *));  

   参数含义

base 	: 指向数组中第一个元素(如果只是对数组的一段区域进行排序,那么要使base指向这段区域的第一个元素)
nmemb	: 要排序元素的数量
size    : 每个数组元素的大小,用字节来衡量
compare : 指向比较函数的指针

   compare指向的比较函数是由程序员自己编写的,如:int 函数名(const void *elem1, const void *elem2 );

  compare编写规则(默认升序)

    如果*elem1小于*elem2,那么返回的数为负数;

     如果*elem1等于*elem2,那么返回0.

     如果*elem1大于*elem2,返回正数. 

2.2 关键点

    数组的元素可能是任何类型的,甚至可能是结构体或联合,所以必须告诉函数qsort如何确定两个数组元素哪一个“更小”。通过编写比较函数可以为qsort提供这些信息。当给定两个指向数组元素的指针p和q时,比较函数必须返回一个整数,如果*p小于*q,那么返回的数为负数;如果*p等于*q,那么返回0.如果*p大于*q,返回正数.按照这种结果返回,qsort对数组默认是升序排序.如果想降序,只需要将上述结果返回值*-1即可

例程1

#include <stdio.h>
#include <stdlib.h>
//升序
int compi(const void *a, const void *b)
{
	const int *p = a;
	const int *q = b;

	return *p - *q;
}
//降序
int compd(const void *a, const void *b)
{
	const int *p = a;
	const int *q = b;

	return (*p - *q) * (-1);
}


int main()
{
	int a[1000];
	int i, len, type;

	while(scanf("%d %d", &len, &type) != EOF)
	{
		for(i = 0; i < len; i ++)
		{
			scanf("%d", &a[i]);
		}

		switch(type)
		{
			case 1 :
				//递增排序
				qsort(a, len, sizeof(a[0]), compi);
				break;
			case 2 :
				//递减排序
				qsort(a, len, sizeof(a[0]), compd);
				break;
		}

		if(type == 1)
		{
			printf("递增排序结果:\n");
		}else
		{
			printf("递减排序结果:\n");
		}
		for(i = 0; i < len; i ++)
		{

			printf("%d ", a[i]);
		}
		printf("\n");
	}
	return 0;
} 
例程2
#include<stdio.h>
#include<stdlib.h>
int MyCompare(const void *elem1,const void*elem2)
{
unsigned int*p1,*p2;
p1=(unsigned int*)elem1;
p2=(unsigned int*)elem2;
return (*p1%10)-(*p2%10);
}
#define NUM 5
int main()
{
  unsigned int an[NUM]={8,123,11,10,4};
  qsort(an,NUM,sizeof(unsigned int),MyCompare);
  for(int i=0;i<NUM;i++)
    printf("%d",an[i]);
  return 0;

}

3. 命令行参数

控制台窗口进入方式:{“win+R ”,然后输入“ cmd”}

int main(int argc,char *argv[])

{

.....

}

argc :代表启动程序时,命令行参数的个数。

argv:指针数组,其中的每个元素都是一个char*类型的指针,该指针指向一个字符串,该字符串中存放着命令行参数。如:

#include<stdio.h>
int main(int argc,char*argv[])
{
  for(int i=0;i<argc;i++)
  printf("%s\n",argv[i]);
  return 0;
}

将上述程序编译成sample.exe,然后在控制台窗口敲:sample para1 para2 ss.txt5 " hi"

输出结果:

sample 

para1 

para2

 ss.txt5 

" hi"



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值