1.常量

常量的声明(必须初始化且不能被修改):const 数据类型 变量名 = 值;
const double PI = 3.1415926;

2.指向常量的指针(指针常量)

指针常量的声明:数据类型 *const 变量名 = 初始值(地址);

  指针常量必须要初始化
  指针常量中,const是限制指针不可变,用于修饰变量,数组,指针等。简单的说,指针一旦被初始化就不可再修改,但是其指向对象的值是可以修改的。
例如:

int value = 100;
int*const pValue = &value;
pValue = 0x00; // 不被允许,错误
*pValue =200;// 正确

3.常量指针

常量指针的声明:数据类型 const *变量名 = 初始值(NULL); /const 数据类型 *变量名 = 初始值(NULL);

  常量指针是一个指向常量的指针。(可以不是常量,因为可以隐式转换)。
  常量指针的const作用与指针常量的const作用互补。是限制常量不可变。简单的说,就是指针初始化之后可以修改其指向,但无法修改指向对象的值。
例子:

 const double PI = 3.1415926;printf("%lf\n", PI);//3.1415926const double* pPI = Π//允许修改指向//*pPI = 10.111;//不允许修改值double* pPI1 = (double*)pPI;//但是强转后,其值可以修改*pPI1 = 10.1111;printf("%lf\n", PI);//10.1111

Tip:可以看出C语言中常量是在编译期间处理的,是一个伪常量; C++中,常量是在预编译期间处理,是真常量。

4.指针和数组

  数组拥有连续的内存空间,系统数据类型的集合;可以利用指针的特性,变量整个
数组。

  数组是利用下标进行的访问,也可以利用指针的偏移(++,–)对数组进行访问。
  数组也是有地址的,数组名就是数组的首地址。
  数组名可以看作是一个特殊的指针常量。

TIPS:不管几维数组都是一维的变形。

5.使用动态内存

  栈区的内存空间是有限的,并且不能随意使用内存大小。
  使用动态内存(也就是堆区的内存)理论上是无限的(实际上取决于物理内存)。

// 申请动态内存
// void* malloc(申请的字节大小);
// 释放申请的内存
// free(起始地址);
// 申请一个int类型大小的内存空间
int *p = malloc(sizeof(int));
*p = 200;
free(p); // 释放申请的内存
p = NULL; // 把当前指针设置为空 防止使用已经释放的内存(野指针)// 设置10个 int 类型大小的连续空间
p = malloc(sizeof(int)*10);
*(p+5) = 300;
p[7] = 400;
free(p);
p = NULL;

TIP:申请的动态内存一定需要手动释放,否则会造成内存泄漏,导致无内存可用
void* 为万能指针类型 ,用于保存地址编号,没有任何实际用途;仅用于保存地址,传递给别人,或者隐藏底层细节。

6.使用指针处理字符串

  字符串是C中最常见的处理单位,因为字符串符合计算机中最小的存储规则(1字节)。

// 声明 字符串指针
// char* 指针变量名 = NULL;// 使用指针计算,字符串中有几个字符A
char arr[1024] = "Hello AAAAA";
char *p = arr;
int num = 0;
for(;*p!='\0';)if(*(p++))num++;
printf("%d\n",num);

const char* ptr. 等价于 char const * ptr;
指向字符常量的指针,即为一个常量指针。其值不能修改,但不意味着其指向的值一定是一个常量,而只是对于ptr而言,指向对象的值是一个常量。
意味着普通的数据类型可以隐式转换为常量类型。(权限大的可向权限小的转换)

7.指针作为函数参数传递

// 一个交换2个变量值的函数
void swap(int* a,int *b)
{int t = *a;*a = *b;*b  =t;
}
int x = 20;
int y = 30;
swap(&x,&y);
printf("%d %d\n",x,y);

8.二级指针(指向指针的指针)

  普通的指针叫做一种指针,如果需要保持一个指针的地址,就需要使用一个二级指针。

// 二级指针的声明
// 数据类型** 指针变量名 = NULL;
#include <stdio.h>int main()
{int a = 10;// 一级指针是一个*int* p = &a;// 指针p保存了a的地址// 二级指针是二个*int** pp = &p;// 指针pp 保存了p的地址// 利用pp和p访问a// *值取指针保存地址的值printf("pp = %d,p = %d", **pp, *p);// 一级指针:// 指针变量p的类型为int* ,所指向的类型为int, // 储存的值为int类型变量i的首地址,即指针变量p指向了int类型a的内存地址。// 二级指针:// 指针变量pp的类型为int**, 所指向的类型为int*, 指针变量p的类型为int*, // 所以pp指向p的内存地址,即pp保存的是p的首地址,*pp访问到的是p所储存的值,**p访问到的是a的值。return 0;
}

9.使用指针访问二维素组

int arr[10][5];
int *p = arr;
for(int i = 0;i<10*5;i++)*(p+i) = i;
for(int i = 0;i<10*5;i++)printf("%d ",*(p+i));

游戏筑基开发之指针的用途(C语言)相关推荐

  1. 【游戏后端】游戏服务器端开发的一些建议(转载)

    摘要: 本文作为游戏服务器端开发的基本大纲,是游戏实践开发中的总结.第一部分专业基础,用于指导招聘和实习考核, 第二部分游戏入门,讲述游戏服务器端开发的基本要点,第三部分服务端架构,介绍架构设计中的一 ...

  2. 「游戏开发」游戏服务器端开发的一些经验

    本文作为游戏服务器端开发的基本大纲,是游戏实践开发中的总结.第一部分专业基础,用于指导招聘和实习考核, 第二部分游戏入门,讲述游戏服务器端开发的基本要点,第三部分服务端架构,介绍架构设计中的一些基本原 ...

  3. 游戏服务器开发的基本体系与服务器端开发的一些建议

    刚开始时以为做游戏服务器和做web差不多,但是经过一段时间之后,才发现代码太多,太乱了,一看代码都想重构,都是踩着坑往前走.这里我把一些游戏开发方面的东西整理一下,希望能对那些想做游戏服务器开发的朋友 ...

  4. 游戏服务器端开发的基本大纲

    摘要: 本文作为游戏服务器端开发的基本大纲,是游戏实践开发中的总结.第一部分专业基础,用于指导招聘和实习考核, 第二部分游戏入门,讲述游戏服务器端开发的基本要点,第三部分服务端架构,介绍架构设计中的一 ...

  5. 游戏后端】游戏服务器端开发的一些建议

    <!--一个博主专栏付费入口结束--><link rel="stylesheet" href="https://csdnimg.cn/release/p ...

  6. 【游戏后端】游戏服务器端开发的一些建议

    摘要: 本文作为游戏服务器端开发的基本大纲,是游戏实践开发中的总结.第一部分专业基础,用于指导招聘和实习考核, 第二部分游戏入门,讲述游戏服务器端开发的基本要点,第三部分服务端架构,介绍架构设计中的一 ...

  7. 1 游戏服务器开发的基本体系与服务器端开发的一些建议

    近年来,我身边的朋友有很多都从web转向了游戏开发.他们以前都没有做过游戏服务器开发,更谈不上什么经验,而从网上找的例子或游戏方面的知识,又是那么的少,那么的零散.当他们进入游戏公司时,显得一脸茫然. ...

  8. (75)游戏服务器开发的基本体系与服务器端开发的一些建议

    转自:http://www.jb51.net/article/119274.htm   侵权删 近年来,我身边的朋友有很多都从web转向了游戏开发.他们以前都没有做过游戏服务器开发,更谈不上什么经验, ...

  9. 手机游戏软件开发的前景 The future of development of game software on mobiles

    一.     课题名称 手机游戏软件开发的前景 The future of development of game software on mobiles 二.     课题分析 计算机领域的方向很多 ...

  10. 游戏服务器开发技术小结

    转载请自觉标明原创出处 原文链接:http://gameislife.info/archives/category/游戏开发    游戏服务器开发技术小结 1 概述 本文从开发者的视角,浅析游戏服务器 ...

最新文章

  1. c#如何取自身应用程序文件名和路径?
  2. 在局域网访问_管理Windows访问凭证,快速访问局域网上的共享资源
  3. php事件和行为,Yii框架组件和事件行为管理详解
  4. 路由到另外一个页面_一个简单的Vue按钮级权限方案
  5. css_position
  6. dns服务器在电脑上有什么作用,DNS服务器是什么 DNS服务器的作用有哪些【详解】...
  7. 浅谈C#字符串构建利器StringBuilder
  8. Entity Framework Core 生成跟踪列
  9. P1401 城市(30分,正解网络流)
  10. 桶排序JAVA软件测试_111-堆排序的速度测试和小结
  11. 通过刷bios的方式在win8.1平板上启动windows phone模拟器
  12. 【图像配准】基于matlab OpenSUFT图像配准【含Matlab源码 1232期】
  13. git 取消merge_git 入门教程之备忘录[译]
  14. linux的管理权限命令,Linux权限管理命令
  15. C++:空间坐标映射到球面坐标/全景图
  16. 【学术】自然语言处理国内外著名会议、期刊
  17. Peer Manager
  18. 2段代码实现在所有浏览器下显示特殊字体(附字体转换工具)
  19. [UE4]风格化渲染
  20. 关于数学计算机手抄报简单的,数学手抄报简单又漂亮图片

热门文章

  1. 如何到top5%?NLP文本分类和情感分析竞赛总结
  2. 191029_中国地震局爬取
  3. 在字节,校招刚入职就得到业界大会talk机会是一种怎样的体验?
  4. 【每日算法Day 81】面试经典题:关于丑数,你真的理解为什么这么算吗?
  5. git push 提示:更新被拒绝,因为您当前分支的最新提交落后于其对应的远程分支。的解决办法
  6. Android进阶:Binder那么弱怎么面大厂?
  7. 用AlphaGo背后的人工智能做金融投资
  8. 揭秘Keras推荐系统如何建立模型、获取用户爱好
  9. 免费讲座:网站运营之人性、策略与实战
  10. php根据某个字段合并两个二维数组,php根据指定字段匹配查找合并两个二维数组...