C++的基础知识(八)--命名空间、结构体
2017-09-28 16:56
513 查看
创建命名空间:
形式:namespace myNamespace{ //stuff }
注意:在最末尾右花括号的后面不需要加上分号。
1) 在预处理器指令的后面、类声明的前面,开始定义命名空间;
2) 类声明和类实现应该放在同一个命名空间里;
3) 只能在全局范围或另一个命名空间的内部定义一个命名空间(命名空间可以嵌套),不能在函数或类里定义命名空间;
4) 可以把任何东西放到命名空间里,而不仅仅是类;还可以用 namespace 关键字为现有的命名空间创建别名,比如,
namespace dog = reallyLongDogBasedNamespace;
使用命名空间
1) using namespace std; cout << “Hi”;
2) using std::cout; cout << “Hi”;
3) std::cout << “Hi”
返回指针的函数
指针作为函数的返回值
如果函数需要返回一个字符串,我们可以返回(char*)类型字符串,不要使用字符数组,因为字符数组在函数执行结束后,就释放了。而使用(char *)声明的字符串是存储在数据段的,直到程序执行结束才会释放。
指向函数的指针
可以用指针指向函数,语法:返回值类型 (*指针名)(【参数列表】);
1.函数的地址就是函数名。
2.指向函数的指针变量,本质上还是一个变量,那么我们就可以声明、赋值给另外一个同类型的指针变量使用。
无参无返回值
有参有返回值
结构体
结构体的声明:
结构体里的声明的多个数据类型变量叫做结构体的成员。
声明结构体类型语法:
声明结构体变量语法:
为结构体变量中的成员赋值
使用结构体注意:
结构体与数组:
语法:struct 结构体类型名 数组名[长度];
结构体与指针:指针指向结构体变量(通过指针间接操作结构体变量)。
语法:struct 结构体类型名 *指针名;
结构体的嵌套:
在结构体内声明另一个结构体类型的变量作为成员来使用
结构体与函数:
结构体作为函数的参数
结构体作为函数的返回值
形式:namespace myNamespace{ //stuff }
注意:在最末尾右花括号的后面不需要加上分号。
1) 在预处理器指令的后面、类声明的前面,开始定义命名空间;
2) 类声明和类实现应该放在同一个命名空间里;
3) 只能在全局范围或另一个命名空间的内部定义一个命名空间(命名空间可以嵌套),不能在函数或类里定义命名空间;
4) 可以把任何东西放到命名空间里,而不仅仅是类;还可以用 namespace 关键字为现有的命名空间创建别名,比如,
namespace dog = reallyLongDogBasedNamespace;
使用命名空间
1) using namespace std; cout << “Hi”;
2) using std::cout; cout << “Hi”;
3) std::cout << “Hi”
返回指针的函数
指针作为函数的返回值
如果函数需要返回一个字符串,我们可以返回(char*)类型字符串,不要使用字符数组,因为字符数组在函数执行结束后,就释放了。而使用(char *)声明的字符串是存储在数据段的,直到程序执行结束才会释放。
#include <stdio.h> #include <stdlib.h> char *getWeekDay(int day) { return "星期N";//返回的是字符串在数据段(常量区)中的地址 } int main(){ char *weekDay = getWeekDay(2); return 0; }
指向函数的指针
可以用指针指向函数,语法:返回值类型 (*指针名)(【参数列表】);
1.函数的地址就是函数名。
2.指向函数的指针变量,本质上还是一个变量,那么我们就可以声明、赋值给另外一个同类型的指针变量使用。
无参无返回值
#include <stdio.h> voidtestFunction() { printf("这是一个无参无返回值的函数\n"); } intmain(intargc,constchar*argv[]){ //指针指向函数 void(*pFunction)()=testFunction;//存储没有返回值没有参数的地址,函数名就是函数的地址 //指针调用函数 (*pFunction)(); pFunction();//简写 return0; }
有参有返回值
#include <stdio.h> int getSum(int num1,int num2) { return num1 + num2; } int main(int argc, const char * argv[]) { //指针指向函数,参数列表可以省略 int (*pFunction)() = getSum; //指针调用函数 int sum = pFunction(10,12); printf("sum = %d\n",sum); return 0; }
结构体
结构体的声明:
结构体里的声明的多个数据类型变量叫做结构体的成员。
声明结构体类型语法:
struct 类型名 { 数据类型1 成员名1; 数据类型2 成员名2; .......... };
声明结构体变量语法:
struct 类型名 变量名;
//声明类型的同时声明变量 struct Student { char *name; int age; float heigth; }stu,stu1;//可以同时声明多个变量 //匿名结构体。声明类型的同时声明变量,可以省略类型名,但是这种方法不能再次声明新的变量了 struct { char *name; int age; float heigth; }stu,stu1;//也可以同时声明多个变量 //声明类型,再声明变量 struct Student { char *name; int age; float heigth; }; struct Student stu1,stu2;//变量名是stu1,stu2.可以同时声明多个变量 struct Student stu2;//变量名是stu2
为结构体变量中的成员赋值
#include <stdio.h> int main(intargc,constchar*argv[]) { //声明一个结构体Student1 structStudent1 { char*name; intage; floatheigth; }; structStudentstu1; stu1.name="zhoujianfeng";//单独为变量的每个成员赋值 stu1.age=18; stu1.heigth=1.9f; //声明一个结构体Student2 structStudent2{ char*name; intage; floatheigth; }; structStudentstu2={"zhoujianfeng",18,1.9f};//声明变量的同时初始化 structStudentstu3={"zhoujianfeng",18};//初始化部分 structStudentstu4={.age=18};//指定成员初始化 structStudentstu5=stu2;//将stu2赋值给stu5 return0; }
使用结构体注意:
1.这个新声明的结构体也是一个数据类型,由程序员自己声明的新类型,所以可以声明这个结构体类型的变量。 2.定义在大括号之中的变量,叫新类型的成员。必须要先声明结构体类型,再声明结构体变量。 3.结构体类型名首字母大写,并且结构体末尾需要加分号, 4.声明一个结构体变量没有初始化,成员的值是垃圾值,如果声明的同时初始化了部分,其他成员初始化为0。 5.相同类型的结构体变量是可以相互赋值的,赋值是将原结构体中的每一个成员的值挨个拷贝给目标结构体变量。 6.结构体变量名,直接代表整个结构体变量。在外面学习到的所有数据类型中,只有数组名、函数名才代表他们的地址。其他都是代表变量本身
结构体与数组:
语法:struct 结构体类型名 数组名[长度];
#include <stdio.h> int main(int argc, const char * argv[]) { struct Student { char *name; int age; int score; }; //stuArray数组的每一个元素的类型是一个struct Student结构体类型 struct Student stuArray[] = { {"小明",19,99}, {"小芳",19,99}, {"小东",18,20} }; //单独初始化一个元素,需要做类型强转,不然编译器不知道赋值给数组还是结构体 stuArray[0] = (struct Student){"小明",19,100}; //数组长度 = 数组占的总字节数 / 每个元素占的字节数 int length = sizeof(stuArray)/sizeof(struct Student); //遍历数组,打印3个学生的信息 for(int i = 0; i < length; i++){ printf("%s %d %d\n",stuArray[i].name,stuArray[i].age,stuArray[i].score); } return 0; }
结构体与指针:指针指向结构体变量(通过指针间接操作结构体变量)。
语法:struct 结构体类型名 *指针名;
#include<stdio.h> struct Student{ char*name; int age; int score; }; int main(intargc,constchar*argv[]){ //初始化变量 struct Studentstu={"静静",19,100}; //p指针指向stu变量 struct Student*p=&stu; //第一种方式 (*p).name="芳芳"; (*p).age=18; (*p).score=99; //第二种方式 p->name="东东"; p->age=18; p->score=99; printf("%s %d %d\n",p->name,p->age,p->score); return 0; }
结构体的嵌套:
在结构体内声明另一个结构体类型的变量作为成员来使用
#include <stdio.h> //日期结构体类型 struct Date{ int year; int month; int day; }; //人结构体类型 struct Person { char *name; int age; struct Date birthday; }; int main(int argc, const char * argv[]) { //创建一个人并赋值 struct Person zhouJianFeng = {"周剑峰",23,{2015,9,18}}; // struct Person zhouJianFeng = {"周剑峰",23,2015,9,18};//可以成员的省略大括号 //打印出这个人的信息 printf("姓名:%s\n年龄:%d\n生日:%d年%d月%d日\n",zhouJianFeng.name,zhouJianFeng.age,zhouJianFeng.birthday.year,zhouJianFeng.birthday.month,zhouJianFeng.birthday.day); return 0; }
结构体与函数:
结构体作为函数的参数
#include<stdio.h> //人结构体类型 structPerson{ char*name; intage; }; void test(struct Person*stu){ stu->name="周剑峰"; stu->age=18; } int main(){ struct Personzhou={"静静",19}; test(&zhou);//调用函数,传入地址 printf("%s%d\n",zhou.name,zhou.age); return 0; }
结构体作为函数的返回值
#include <stdio.h> //人结构体类型 struct Person{ char*name; int age; }; struct PersongetStu(){ struct Personstu={"静静",19}; return stu;//是返回一个变量的值 } int main(){ struct Personstu=getStu(); printf("%s%d\n",stu.name,stu.age); return 0; }
相关文章推荐
- c++基础知识(命名空间、输入输出流、重载、缺省、引用)
- C++基础知识(二)命名空间
- c++ 基础知识(输入输出、namespace命名空间、引用、函数重载模版、内存管理)
- 【C++】基础知识—与C语言关系、命名空间
- C++基础:什么是命名空间
- 命名空间基础知识
- C++ 基础知识点 四 第5章 C++函数与程序结构
- C++ 基础 命名空间 类头文件 类的实现写法
- XML基础知识——Schema命名空间的声明
- c++基础学习 - 命名空间
- c++基础知识---名字空间
- C++语言基础 例程 命名空间要解决的问题
- 【C/C++】C++名空间基础知识点
- c++基础知识---名字空间
- C++基础积累(1)using namespace potter 自定义命名空间和使用
- Objective-C中的命名前缀说明 & 与C++的不同之处 &Modern Objective-C 基础知识
- C++基础学习2:命名空间
- PHP之新手自学基础知识(六)——拓展篇之命名空间
- C++语言基础 例程 命名空间的使用
- FreeMarker基础入门知识6 -命名空间