c++ 语法出初学(new-delete cout cin namespace)


new-delete语法简介

a)C语言中需要使用malloc与free申请与释放堆空间:
b)C++把堆空间申请与释放做成关键字,底层也是malloc和free。
c)用起来绝对舒服,成为关键字不用包含头文件。
d)就如同栈一样的模式,比如:栈内申请一个数组:
int a[20];
int* p = new int[20];//堆数组

#include<stdio.h>
#include<stdlib.h>

void Input(int* p, int nLen)
{
	while (nLen--)
		*p++ = nLen * 103 / 22;
}
void Print(const int* p, int nLen)
{
	while (nLen--)
	{
		printf("%d ", *p++);
	}
}
int main()
{
	//栈
	int a[20];
	Input(a, _countof(a));	
	Print(a, _countof(a));

	printf("\n");
	//堆空间
	int n = 20;
	int* p = new int[n];//给我来20个int
	Input(p, n);
	Print(p, n);
	delete []p; //用完记得释放

	printf("\n");
	//malloc申请堆空间
	int* q = (int*)malloc(sizeof(int)*20);
	Input(q, n);
	Print(q, n);
	free(q); //用完记得释放
	return 0;
}

栈 堆 申请变量

#include<stdio.h>
#define N 100
struct SData
{
	int nNumb; 
	char sName[20];
	float fSalary;
};
int main()
{
	//栈上申请单个变量
	int n = 888;
	double d = 999.99;
	double a[N] = {88.88}; //栈内申请数组只能是常量
	SData data = { 1002,"Alice",999.22f };

	//堆上申请单个变量 98版本支持() 简单类型的变量 TYPE *x = new TYPE[N] N可以是变量 delete []x 申请时带中括号[],释放的时候也要带[]
	int* x = new int(888);
	int* p = new int;
	*p = 888;
	delete p;

	double* y = new double(999.99);
	delete y;
	

	// 11版本 推荐都用{ } 涉及大括号{}都是11版本
	int* q = new int{ 888 };
	delete q;

	int n1 = 30;
	double* ds = new double[n1] {88.88, 98, 33, 33, 555};  // N可以是变量
	delete[]ds; // 释放时才有机会发现越界

	SData* m = new SData{ 1002,"Alice",999.22f };
	delete m;

	return 0;
}

一、 cin和cout语法简介

a)C++系统的头文件不加.h,故意可以防止与自己的头文件冲突。
b)cin和cout最大的特点就是类型自动识别,比printf的%d,%f要好用多了
c)cin的时候也不用取地址,为什么呢?实际上内部语法是引用型变量(自动转帮你取地址)。
d)cout <<“\n"一般会使用cout << endl;代替//end of line
cout 不足之处是占位不如printf(”%-8.2f"…)好用。

#include<iostream>
using namespace std;
int main()
{
		int n1;//代表3个学号
		char s1[20];
		float m1;//math
		float c1;//chinese
		float e1;//english
		float sum1;
		float average=0;

		int i = 0;		//cin cout 最大的特点时类型自动识别
		//printf("请输入第 %d个同学的学号、姓名和成绩(语数英):", ++i);
		cout << "请输入第 " << ++i << "个同学的学号、姓名和成绩(语数英):";
		cin >> n1 >> s1 >> m1 >> c1 >> e1;

		cout << n1 << "\t" << s1 << "\t" << m1 << "\t" << c1 << "\t" << e1 <<
			"总分:" << m1 + c1 + e1 << "平均:" << (m1 + c1+e1) / 3 << endl; //endl 相当于 \n
	return 0;
}

二、namespace命名空间

a)这个语法是为了解决变量和函数名字冲突;
b)比如每个程序员用自己的姓名作为分类名称,namespace类似加了一个外壳。
c)using namespace xxx,就代表把壳去掉。

#include<iostream>
using namespace std;
namespace XQ
{
	double g1 = 0.8;

	int add(int a, int b)
	{
		return a + b;
	}
}

double g1;
//命名空间 解决变量和函数名字冲突
int main()
{
	XQ::g1 = 888.88;
	XQ::add(6, 8);

	g1 = 99.999;
	cout << "XQ::g1的地址" << &XQ::g1 << endl; 
	cout << " g1的地址" << &g1 << endl;
	return 0;
}

2.using namespace std

#include<iostream>
//using namespace std; 打破std的壳子 打破之后不需要每一个都加std::
namespace XQ
{
	double g1 = 0.8;

	int add(int a, int b)
	{
		return a + b;
	}
}

double g1;
using namespace XQ; //破了壳可直接调用
//命名空间 解决变量和函数名字冲突
int main()
{
	XQ::g1 = 888.88;
	add(6, 8);

	::g1 = 99.999; //::无壳 裸漏的变量
	std::cout << "XQ::g1的地址" << &XQ::g1 << std::endl; //没有using 就要加壳子 std::  
	std::cout << " g1的地址" << &::g1 << std::endl;
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jcrry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值