学习C++首先要回忆起C语言当中的指针和结构体知识,本文作者将通过一段代码来总结指针和结构体基础知识:指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明。结构体是一个由程序员定义的数据类型,可以容纳许多不同的数据值。

点击查看代码
  1. #include<iostream>
  2. using namespace std;
  3. //#include<string>
  4. struct student
  5. {
  6. int age;
  7. string name;
  8. int score;
  9. };
  10. struct teacher
  11. {
  12. string name;
  13. int id;
  14. int age;
  15. struct student stu;
  16. }t;
  17. struct grade
  18. {
  19. string name;
  20. int age;
  21. int score;
  22. }s1;
  23. void test01()
  24. //32位(x86)-4个字节 64位(x64)-8个字节(无论是什么数据类型)
  25. {
  26. //int a;
  27. //int* p;
  28. //p = &a;
  29. //或者int* p = &a;
  30. //cout << sizeof(p) << endl;
  31. }
  32. void test02()//空指针
  33. {
  34. //空指针用于给指针变量进行初始化
  35. //int* p = NULL;
  36. //空指针是不可以直接进行访问的
  37. //*p = 190;
  38. //cout << *p << endl;
  39. }
  40. //野指针就是指针指向的位置是不可知的
  41. void test03()
  42. {
  43. //地址传递会改变实参的值
  44. //值传递不会改变实参的值
  45. }
  46. void test04()//const
  47. {
  48. //看const右边紧跟着的是指针还是常量,是指针就是常量指针,是常量就是指针常量
  49. //int a = 10;
  50. //int b = 20;
  51. //常量指针const int*(指针)
  52. //const int* p1 = &a;
  53. //p1 = &b;//yes
  54. //*p1 = 20;//no
  55. //指针常量int* const(常量)
  56. //int* const p2 = &a;
  57. //p2 = &b;//no
  58. //*p2 = 20;//yes
  59. //const 修饰指针与常量
  60. //const int* const p3 = &a;
  61. //*p3 = 20;//no
  62. //p3 = &b;//no
  63. }
  64. void test05()
  65. {
  66. //利用指针来访问数组当中的每一个元素
  67. int arr[] = {1,3,5,7,9,11,13};
  68. int* p = arr;
  69. for (int i = 0; i < 7; i++)
  70. {
  71. cout << *p << endl;
  72. p++;
  73. }
  74. }
  75. void test06()
  76. {
  77. int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
  78. //求数组的长度
  79. int len = sizeof(arr) / sizeof(arr[0]);
  80. int len1 = sizeof(arr);//数组总的字节数
  81. int len2 = sizeof(arr[0]);
  82. cout << len << endl;
  83. //冒泡排序:0~n-1与0~n-i-1
  84. }
  85. void test07()
  86. {
  87. //结构体属于自定义的数据类型(可以存储不同类型的数据类型)
  88. //结构体当中还有string类型的时候 使用cout输出该属性 加头文件string
  89. string name = "zfx";
  90. cout << name <<endl;
  91. }
  92. void test08()
  93. {
  94. t.name = "wsb";
  95. t.age = 45;
  96. t.id = 1;
  97. //结构体当中的结构体
  98. t.stu.age = 19;
  99. t.stu.name = "zfx";
  100. t.stu.score = 88;
  101. cout << t.name << " " << t.stu.name;
  102. }
  103. void test09(struct grade* s1)
  104. {
  105. //将函数当中的形参改为指针 可以节省空间
  106. //在形参前面加上const可以防止误操作
  107. }
  108. int main()
  109. {
  110. //test08();
  111. //test07();
  112. s1.name = "zfx";
  113. s1.age = 19;
  114. s1.score = 88;
  115. test09(&s1);
  116. //struct grade* ps = &s1;
  117. //cout <<"专业第一的名字"<< s1.name<<endl<<"age:"<<s1.age <<endl<<"score:"<<s1.score<< endl;
  118. //cout << ps->name << " " << ps->age << " " << ps->score << endl;
  119. system("pause");
  120. return 0;
  121. }

C++指针和结构体基础知识的更多相关文章

  1. 35深入理解C指针之---结构体基础

    一.结构体基础 1.定义:结构体大大加强了C的数据聚合能力,可以使得不同类型的数据进行结合 2.特征: 1).结构体可以使得不同类型的数据进行结合 2).结构体可以使用内置的数据类型,包括指针 3). ...

  2. C++结构体基础知识

    结构体 一.什么是结构体 假设我们要存储有关篮球运动员的信息,则可能存储Ta的姓名.工资.身高.体重.平均得分等,希望有一种数据格式可以将这些信息存放在一个单元中. 因此引入了结构的概念 结构是用户定 ...

  3. 嵌入式-C语言基础:通过结构体指针访问结构体数组

    #include<stdio.h> #include<string.h> struct Student { char name[32]; int age; int height ...

  4. 深入理解C指针之六:指针和结构体

    原文:深入理解C指针之六:指针和结构体 C的结构体可以用来表示数据结构的元素,比如链表的节点,指针是把这些元素连接到一起的纽带. 结构体增强了数组等集合的实用性,每个结构体可以包含多个字段.如果不用结 ...

  5. Android For JNI(五)——C语言多级指针,结构体,联合体,枚举,自定义类型

    Android For JNI(五)--C语言多级指针,结构体,联合体,枚举,自定义类型 我们的C已经渐渐的步入正轨了,基础过去之后,就是我们的NDK和JNI实战了 一.多级指针 指针的概念我们在前面 ...

  6. c语言指针与结构体

    #include <stdio.h> #include <stdlib.h> struct mydata { int num; ]; }; void main1() { /*i ...

  7. 【阅读笔记】《C程序员 从校园到职场》第七章 指针和结构体

    原文地址:让你提前认识软件开发(13):指针及结构体的使用 CSDN博客 https://blog.csdn.net/zhouzhaoxiong1227/article/details/2387299 ...

  8. 36深入理解C指针之---结构体的内存处理

    一.有关结构体的内存处理包括,结构体指针和结构体成员指针的内存分配.结构体成员的数据对齐.结构体的内存释放 1.定义:与自定义数据类型(结构体)有关的内存分配.大小和释放问题 2.特征: 1).用内存 ...

  9. C++ 利用指针和数组以及指针和结构体实现一个函数返回多个值

    C++ 利用指针和数组实现一个函数返回多个值demo1 #include <iostream> using namespace std; int* test(int,int,int); i ...

随机推荐

  1. Linux网络重点知识总结性梳理

    一个执着于技术的公众号 1 OSI七层模型 层次 说明 功能/协议 应用层 应用程序及接口 提供应用程序的接口:FTP telnet http pop3等 表示层 对数据进行转换.加密和压缩 将上层的 ...

  2. 关于利用STL栈求解四则中缀表达式以及中缀表达式转逆波兰表达式和逆波兰表达式的求解

    今天总结一下栈的一个重要应用---四则数学表达式的求解 数学表达式的求解是栈的一个重要的应用,在计算机的应用中 如果求解一个四则运算表达式,我们可能会直接写一个程序例如什么printf("% ...

  3. 并发编程系列之Lock锁可重入性与公平性

    一.相似之处:Lock锁 vs Synchronized 代码块 Lock锁是一种类似于synchronized 同步代码块的线程同步机制.从Java 5开始java.util.concurrent. ...

  4. Ruby 趣学笔记(二)

    Ruby 趣学笔记(二) 本文写于 2020 年 5 月 7 日 类的继承 之前忘记写了,Ruby 的继承写法是: class IPhone < Phone def initialize(id, ...

  5. 被迫开始学习Typescript —— interface

    一开始以为,需要使用 class 来定义呢,学习之后才发现,一般都是使用 interface 来定义的. 这个嘛,倒是挺适合 js 环境的. 参考:https://typescript.bootcss ...

  6. 个人冲刺(三)——体温上报app(一阶段)

    任务:完成了app第二页面的页面布局 activity_second.xml <?xml version="1.0" encoding="utf-8"?& ...

  7. Spring boot中最大连接数、最大线程数与最大等待数在生产中的异常场景

    在上周三下午时,客户.业务和测试人员同时反溃生产环境登录进入不了系统,我亲自测试时,第一次登录进去了,待退出后再登录时,复现了客户的问题,场景像是请求连接被拒绝了,分析后判断是spring boot的 ...

  8. node.js环境安装及环境变量

    1.nodejs官网下载对应系统的安装包 2.除了你想自定义安装的路径其他一切一直点next往下走 3.打开cmd命令窗口输入node -v,看到v.xx.xx代表node已经装好 node -v 4 ...

  9. Java使用FreeMarker模版技术动态生成word实践

    一.序言 在日常开发中,常常有动态word文件生成的需求,通过编制模版,然后动态修改word内容以组合成新的文件.报告单.请假单.发票页等都可以使用动态生成word来解决. 笔者总结归纳出通用技术要点 ...

  10. 浅析DispatchProxy动态代理AOP

    浅析DispatchProxy动态代理AOP(代码源码) 最近学习了一段时间Java,了解到Java实现动态代理AOP主要分为两种方式JDK.CGLIB,我之前使用NET实现AOP切面编程,会用Fil ...