指针

指针的基本概念

指针的作用: 可以通过指针间接访问内存

  • 内存编号是从0开始记录的,一般用十六进制数字表示

  • 可以利用指针变量保存地址


指针变量的定义和使用

指针变量定义语法: 数据类型 * 变量名

#include <iostream>
using namespace std;
int main() {//1、指针的定义int a = 10; //定义整型变量a//指针定义语法: 数据类型 * 变量名 ;int * p;//指针变量赋值p = &a; //指针指向变量a的地址cout << &a << endl; //打印数据a的地址cout << p << endl;  //打印指针变量p//2、指针的使用//通过*操作指针变量指向的内存cout << "*p = " << *p << endl;system("pause");return 0;
}



指针变量普通变量的区别

  • 普通变量存放的是数据,指针变量存放的是地址

  • 指针变量可以通过" * "操作符,操作指针变量指向的内存空间,这个过程称为解引用


指针所占内存空间

提问:指针也是种数据类型,那么这种数据类型占用多少内存空间?

#include <iostream>
using namespace std;
int main() {int a = 10;int * p;p = &a; //指针指向数据a的地址cout << *p << endl; //* 解引用cout << sizeof(p) << endl;cout << sizeof(char *) << endl;cout << sizeof(float *) << endl;cout << sizeof(double *) << endl;system("pause");return 0;
}



空指针和野指针

空指针:指针变量指向内存中编号为0的空间

用途:初始化指针变量

注意:空指针指向的内存是不可以访问的



野指针:指针变量指向非法的内存空间



const修饰指针

const修饰指针有三种情况

  1. const修饰指针 --- 常量指针

  2. const修饰常量 --- 指针常量

  3. const即修饰指针,又修饰常量

#include <iostream>
using namespace std;
int main() {int a = 10;int b = 10;//const修饰的是指针,指针指向可以改,指针指向的值不可以更改const int * p1 = &a; p1 = &b; //正确//*p1 = 100;  报错//const修饰的是常量,指针指向不可以改,指针指向的值可以更改int * const p2 = &a;//p2 = &b; //错误*p2 = 100; //正确//const既修饰指针又修饰常量const int * const p3 = &a;//p3 = &b; //错误//*p3 = 100; //错误system("pause");return 0;
}



指针和数组

作用:利用指针访问数组中元素

#include <iostream>
using namespace std;
int main() {int arr[] = { 1,2,3,4,5,6,7,8,9,10 };int * p = arr;  //指向数组的指针cout << "第一个元素: " << arr[0] << endl;cout << "指针访问第一个元素: " << *p << endl;for (int i = 0; i < 10; i++){//利用指针遍历数组cout << *p << "  ";p++;}cout<<endl;system("pause");return 0;
}



指针和函数

作用:利用指针作函数参数,可以修改实参的值

#include <iostream>
using namespace std;
//值传递
void swap1(int a ,int b)
{int temp = a;a = b; b = temp;
}
//地址传递
void swap2(int * p1, int *p2)
{int temp = *p1;*p1 = *p2;*p2 = temp;
}int main() {int a = 10;int b = 20;swap1(a, b); // 值传递不会改变实参swap2(&a, &b); //地址传递会改变实参cout << "a = " << a << endl;cout << "b = " << b << endl;system("pause");return 0;
}



指针、数组、函数

案例描述:封装一个函数,利用冒泡排序,实现对整型数组的升序排序

例如数组:int arr[10] = { 4,3,6,9,1,2,10,8,7,5 };

int * arr 也可以写为 int arr[]

#include <iostream>
using namespace std;
//冒泡排序函数
void bubbleSort(int * arr, int len)  //int * arr 也可以写为int arr[]
{for (int i = 0; i < len - 1; i++){for (int j = 0; j < len - 1 - i; j++){if (arr[j] > arr[j + 1]){int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}
}//打印数组函数
void printArray(int arr[], int len)
{for (int i = 0; i < len; i++){cout << arr[i] << "  ";}cout<<endl;
}int main() {int arr[10] = { 4,3,6,9,1,2,10,8,7,5 };int len = sizeof(arr) / sizeof(int);bubbleSort(arr, len);printArray(arr, len);system("pause");return 0;
}

指针||指针和数组||指针和函数||指针、数组、函数 案例描述:封装一个函数,利用冒泡排序,实现对整型数组的升序排序相关推荐

  1. 写一个函数,使给定的一个3 × 3的二维整型数组转置,即行列互换。

    题目来源: C语言程序设计(第四版)/ 第七章 / 习题7.3 题目要求: 写一个函数,使给定的一个3 × 3的二维整型数组转置,即行列互换. 具体思路: 将给定的二维整型数组a用另外一个二维数组b备 ...

  2. python函数编写名片_python案例:实现一个函数版的名片管理系统

    本案例使用了自定义函数以及对字符串的常见操作.判断语句和循环语句等知识. 要求 必须使用自定义函数,完成对程序的模块化. 名片信息至少包括:姓名.电话.住址. 必须完成的功能:增.删.改.查.退出. ...

  3. java二维整型数组 各行和排序_java:已知我有一个二维数组,直接输入全部数据,怎么对数组的每行进行升序排序...

    展开全部 书写完毕,采纳即可. import java.util.Arrays; import java.util.Comparator; import java.util.Scanner; publ ...

  4. C语言:使用指针,封装一个函数, // 使输入的奇数从小到大排列,奇数排列完毕之后,再把偶数从大到小进行排列, // 最终输出整个

    // 使用指针,封装一个函数, // 使输入的奇数从小到大排列,奇数排列完毕之后,再把偶数从大到小进行排列, // 最终输出整个 #include <stdio.h> void Jopai ...

  5. C语言试题三十五之找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回。主函数中x是数组名,n 是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。

    1. 题目 请编写一个函数function,它的功能是:找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回.主函数中x是数组名,n 是x中的数据个数,max存放最大值,i ...

  6. 编写一个函数get_average()获取整型数组元素的平均值。要求这个函数既可以用来求一维数组元素的平均值,也可以求二维数组元素的平均值。

    题目内容: 编写一个函数get_average()获取整型数组元素的平均值.要求这个函数既可以用来求一维数组元素的平均值,也可以求二维数组元素的平均值.在main()函数中通过具体的一维数组Array ...

  7. python fun函数、求4x4整型数组的主对角线元素的和_求一个4×4的整型二维数组主对角线元素之和...

    展开全部 下面是Java语言编写一个计算4*4整型数组对角线636f70793231313335323631343130323136353331333431353338元素和的代码: import j ...

  8. C语言:批量初始化二维整型数组及二维整型数组作函数参数的重要知识点[C_006]

    目录 概述:二维整形数组和二维字符数组在处理过程中有些微妙的差异值得注意,否则容易出错. 1.二维整形数组的初始化 2.常见场景:把二维整形数组的元素初始化为相同值 3.应用场景,二维数组作函数的参数 ...

  9. c语言去掉数组中重复的,C语言删除无序整型数组中的重复元素及时间复杂度

    数组重复的问题在任何编程中都会有碰到了,这里介绍C语言删除无序整型数组中的重复元素及时间复杂度,希望对各位有帮助. 遇到一个题,大概要求是写一个函数处理来去掉一个无序的整型数组(例如int i_arr ...

最新文章

  1. VTK修炼之道41:频域处理_低通滤波(理想+巴特沃兹)
  2. fastapi 传输文件存文件_揭秘|国内影视文件传输的真相,跨境文件传输更不简单...
  3. [转载]Validation of viewstate MAC failed异常的原因及解决方法
  4. 每日小记2017.2.28
  5. python制作一个简单的udp聊天器
  6. c++ 状态模式(state)
  7. 克鲁斯卡尔算法c语言,Kruskal算法(一)之 C语言详解
  8. php实用小技巧【持续更新】
  9. nginx 优化配置
  10. 关于JavaScript实现图片预加载的改进
  11. 商业银行最全数据-66年跨度、100+指标(涵盖业务、股东、高管、员工、审计等数据)
  12. 【互联网那些事】到底什么是互联网思维
  13. hive优化——并行执行
  14. LVM 的自定义报告(pvs vgs lvs各参数详解)
  15. vmdk to vhdx 虚拟磁盘格式转换qemu-img
  16. 再阿里云服务器卸载安骑士并且屏蔽云盾
  17. IONIC中slides的使用(图片显示及其删除)
  18. 金融行业的数据分析怎么做?
  19. 使用indexedDB(三)(翻译)
  20. 怎么用 UDP 实现 TCP?

热门文章

  1. HDU 6304 Chiaki Sequence Revisited
  2. gradle编译出错:Execution failed for task #39;:app:compileTestDebugJava#39;.
  3. [LeetCode]Perfect Squares
  4. JNI错误记录--JNI程序调用本地库时JVM崩溃
  5. ZOJ Problem Set - 3329 One Person Game
  6. [Silverlight]使用MVVM模式打造英汉词典
  7. visual studio 2005占用cpu100% -_-...
  8. 机器人差速驱动方式(Differential Drive)
  9. Android 使用反射机制获取或设置系统属性(SystemProperties)
  10. 【知识点】Java常用类库