一、C
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//1.全局变量检测增强
int a;
int a = 10;
//2. 函数检测增强
/*c
1.语言中不加返回值;
2.形参不指定数据类型;
3.函数调用时传参个数与被调用函数参数数量不一致也可以通过编译和运行
*/
int myprint(w,h){
printf("%d %d\n", w, h);
}
void test01() {
myprint(10, 30, 40);
}
//3.类型检测增强
void test02() {
char* p = malloc(64);
}
//4.struct增强
/*
1. 结构体中不允许定义函数
2. 创建结构体类型变量时必须带上struct
*/
struct Student {
int age;
//void print() {}
};
//5.bool类型增强
//c语言中是没有布尔类型的,秉承非0即为真的原则
//6.三目运算符的增强
void test3yuan() {
int a = 100;
int b = 200;
int c = a > b ? a : b;
printf("c=%d\n", c);//200
//如下写法在c语言中是无法通过预编译的
// 可以理解为c语言下面,三目运算符返回的是变量所代表的值
//int d = a > b ? a : b=100;
//如果想达到c++下面的效果,则可以这样写
int d = *(a > b ? &a : &b) = 100;
printf("d=%d\n", d);//100
}
//7.const增强
const int C_A = 200;
void testConst() {
//C_A = 300; //这样写无法通过预编译
//如下这么写可以通过编译,但是运行时会提示写入权限冲突
/*int* p = &C_A;
*p = 300;
printf("*p=%d\n", *p);*/
const int C_B = 100;
//C_B = 200;//这样写无法通过预编译
//如下写法成功运行
int* p = &C_B;
*p = 300;
printf("*p=%d\n", *p);
//int arr[C_B];//这样写无法通过预编译,提示“表达式必须含有常量值”
}
int main() {
testConst();
system("pause");
return EXIT_SUCCESS;
}
二、C++
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
//1.全局变量检测增强
// c++中编译器会提示int a重定义
//int a;
//int a = 10;
//2. 函数检测增强
// 下面这种写法均不能通过c++的预编译
//int myprint(w, h) {
// printf("%d %d\n", w, a);
//}
//
//void test01() {
// myprint(10, 30, 40);
//}
//3.类型检测增强
//必须强转,因为malloc方法返回的类型是void*
void test02() {
char* p = (char*)malloc(64);
}
//4.struct增强
/*
1. 结构体中可以定义函数
2. 创建结构体类型变量时可以不用带上struct
*/
struct Student {
int age;
void print() {}
char set;
};
//5.bool类型增强
//c++语言中提供了bool类型,实质仍是非0即为真
void testbool() {
bool flag1 = true;
bool flag2 = false;
bool flag3 = -1;
cout << flag1 << endl; //1
cout << flag2 << endl; //0
cout << flag3 << endl; //1
}
//6.三目运算符的增强
void test3yuan() {
int a = 100;
int b = 200;
int c = a > b ? a : b;
cout<<"c="<<c<<endl;//200
//如下写法在c++语言中是可以成功执行的
/*
可以理解为c++语言下三目运算符返回的是变量
*/
int d = a > b ? a : b=400;
cout << "a=" << a << endl;
cout << "b=" << b << endl;
cout << "c=" << c << endl;
cout << "d=" << d << endl;
//b和d的地址是不一样的
cout << "b的地址" << &b << endl;
cout << "d的地址" << &d << endl;
}
//7.const增强
const int C_A = 200;
void testConst() {
//C_A = 300; //这样写无法通过预编译
//如下这么写不可以通过预编译,提示“const int *类型的值不能用于初始化int *类型的实体”
/*int* p = &C_A;
*p = 300;
printf("*p=%d\n", *p);*/
const int C_B = 100;
//C_B = 200;//这样写无法通过预编译
//如下这么写不可以通过预编译,提示“const int *类型的值不能用于初始化int *类型的实体”
/*int* p = &C_B; //这么些其实是会生成一个临时变量,c++引入了常量符号表的概念
*p = 300;
printf("*p=%d\n", *p);*/
int arr[C_B];//可以用来初始化数组
}
int main() {
//testbool();
//test3yuan();
testConst();
system("pause");
return EXIT_SUCCESS;
}