一
int IsSvn(int n)
{
if (n % 7 == 0)
return 1;
}
要判断这个数能不能被7整除,你就只返回1吗??!!!那岂不是只返回1,没有0的情况了!应该改为:
int IsSvn(int n)
{
if (n % 7 == 0)
return 1;
else
return 0;
}
二
#include<algorithm>
#include <iomanip>
#include <functional>
#include <iostream>
#include <iostream>
#include <vector>
using namespace std;
struct point
{
int val;
point(int x = 0) :val(x){} //初始化列表默认在point()没有输入参数时,val为0;但是不影响正常输入参数,如point(2),那么val就是2;
bool operator<(const point &x) const{ return x.val < val; } //原先的operator为val<x.val , 改变成了x.val<val, 也就是反过来了,影响后面的sort函数关于point类型的排序;
bool operator +(const point &x) const{ return val- x.val; }//1、巨大的陷阱,这个输出是bool型,只要不是0,都是1; 2、将operator + 改为了 -;
}a[10];
int main()
{
int n = 5;
for (int i = 1; i <= n; i++)
{
a[i] = point(i);
}
sort(a + 1, a + 1 + n);//本来sort默认升序排列,现在关于point的操作比较,因为运算符重载,大于变成了小与,所以就成了降序排列!!!
cout << (a[1] + a[2]) << endl;//关于point操作,运算符重载,+变为-;
system("pause");
return 0;
}
输出结果为1.
再试试这个
struct point
{
int val;
point(int x = 0) :val(x){}
bool operator<(const point &x) const{ return x.val < val; }
int operator +(const point &x) const{ return val - x.val; }
}a[10];
int main()
{
int b[4] = {1,4,2,3};
sort(b, b + 4);
int n = 5;
for (int i = 1; i <= n; i++)
{
a[i] = point(i);
}
sort(a + 1, a + 1 + n);
cout << (a[1] + a[3]) << endl;
system("pause");
return 0;
}
输出为2;
三
int main()
{
int aa;
cin >> aa;
cout << aa << endl;
fflush(stdin);\\这里要将缓冲区清空,否则上次输入的换行符会影响下面的输入,下面会直接判断有换行符要什么都不输出就结束!!
int a[50];
int i = 0;
char c;
while ((c = getchar()) != 10)
{
if (c >= '0'&&c <= '9' || c == '-')
{
ungetc(c, stdin);
int tmp;
cin >> tmp;
a[i++] = tmp;
}
}
for (int j = 0; j<i; j++)
{
cout << "a[" << j << "]:" << a[j] << endl;
}
system("pause");
return 0;
}
四
const int a; int const a; 这两个写法是等同的,表示a是一个int常量。
const int *a; 表示a是一个指针,可以任意指向int常量或者int变量,它总是把它所指向的目标当作一个int常量。也可以写成int const* a;含义相同。
int * const a; 表示a是一个指针常量,初始化的时候必须固定指向一个int变量,之后就不能再指向别的地方了。
int const * a const;这个写法没有,倒是可以写成int const * const a;表示a是一个指针常量,初始化的时候必须固定指向一个int常量或者int变量,之后就不能再指向别的地方了,它总是把它所指向的目标当作一个int常量。也可以写成const int* const a;含义相同。
下面程序放到自己便一起看看!!!!哪些地方是错的!!
int * const a; 表示a是一个指针常量,初始化的时候必须固定指向一个int变量,之后就不能再指向别的地方了。
只要指针指向的数值不是const型,那么就只能指向变量,不能指向常量!!(int *a, int * const a;)
const int i = 10;
int * j = &i;//编译错误,i是const,不能被可变的 *j来指;
int * j1 = (int*)&i;//正确,经过int*转换,j1不会再指向const int i. (int*)&i只是一个int * 的地址数值,不是const int *的地址数值了,发生了转换类型;
int * j3 = (const int*)&i;//编译错误,i是const,不能被可变的 *j来指;
const int * j2 = (int*)&i;
const int * j4 = (const int*)&i;
const int *a; 表示a是一个指针,可以任意指向int常量或者int变量,它总是把它所指向的目标当作一个int常量。也可以写成int const* a;含义相同
int num1 = 23;
const int *age3 = &num1;
cout << *age3 << endl;//23
const int *const age4 = &num1;
int val1 = 101;
age3 = &val1; // 编译通过
cout << *age3 << endl;//101,age3是一个可变的地址,每次赋新的地址,那么它指向的数值就是不同的const区域,所以cout << *age3 << endl;输出不一样;但是还是不能*age3=某个数值来改变它指向的数值;
*age3 = val1; // 编译报错
int const *age4 = (int *)24;
int const *age4 = 24;//int类型的值24 不能初始化 int const * 实体,指针。int不能初始化指针,转换为int* 就可以了。
int * const age5 = (int *)25;
int val2 = 102;
age5 = &val2; // 编译报错
*age5 = val2; // 编译通过
总结:
1)指针指向的数值如果不是const类型((int *a, int * const a;)),那么就只能用变量来初始化,不可以用常量来初始化!
2)指针指向的数值如果是const类型((const int *a, const int * const a;)),那么就可以用变量或者常量来初始化!
3)指针是const类型,那么指针就不能改变了!