------- android培训、java培训、IOS培训、期待与您交流! ----------
1. 什么是指针
// 指针,即使pointer
// 我要去三里屯,给一张地图
// 指针== 地址
// 内存与内存地址(*****)
// 内存模型
// 就是一个一个并列的盒子,每一个盒子里值允许存放0或者1(二进制)
// 整合一下,用字节表示一个盒子
// 内存就是一个一个并排的盒子结构(竖着并排)
//
// 每一个内存字节都有一个地址,而且地址从0开始
// 但是我们在使用时不需要考虑
//
// int num = 10;
// 在内存中开辟了一个4字节长度的字节组,将数字10存到里面
// 问题是字节从哪里开始存?不用关
// 只需要关心相邻的地址
// 所谓的指针,就是地址
// 取地址运算符 &
// 语法:& 变量名
// 值:指针
int main()
{
int num =10;
printf("%p\n",&num);
return 0;
}
2. 指针类型的变量
// 指针是地址,就是一段地址
// 指针类型的变量,就是储存地址的变量
// int num; int变量,就是储存int类型数据的变量
// 指针变量,变量的指针,就是变量的地址,即&num
// 指针式一个地址,但是指针类型的变量是要区分类型的(以后再说,重要度:✨✨✨✨✨)
// 如果要定义一个指向int类型的变量的指针储存int类型变量的地址的变量
// int *变量
// 此时变量"变量名"可以储存地址,但是要求地址是int类型变量的地址(默认是这样)
// 注意:指针变量的变量是储存地址的,那么如果给指针类型的变量赋初始值?
// 1>定义的同时初始化
// int num = 10; int *iNump = #
// 2>先定义,再初始化
//int num =10; int *p; p =#
// 3>先定义,使用的时候再初始化(难点,易错点)
// 如果将来工作,第二个写法是有错的
// 指针在使用的时候最大的特点是可以"随意地"访问内存
// 不给指针变量初始化容易出现错误,对于没有初始化的指针,常常称其为"野指针"
// 定义好指针后用什么进行初始化?
// int *p =12345; // 不允许使用任意的数字
// 规定使用数字0进行初始化int 8p = 0;
// 在stdio.h中定义了一个宏名NULL 表示的就是空指针
// 一般在初始化的时候建议使用它: int *p = NUlLL;
#include <stdio.h>
int main()
{
int num = 10;
int *p = #
int *p2;
p2 = #
int *p3 = 12345; //非法占用可能有数据的内存地址
int *p4 = 0;
int *p5 = NULL; // 最建议的初始化方式
return 0;
}
3. 指针注意点
// 1.指针为何要区分类型
// 指针类型的变量占8个字节, 用sizeof验证,32位计算机上是4个字节
// why?因为指针里存的就是计算机地址,指针长度就是计算机位数64位,即8个字节
// int *p; *p一次性读取4个字节 long *p2; *p2一次性读取8个字节
// 指针类型决定了指针*p一次性读取的数据长度以及数据的读取格式
// 变量的类型决定了数据在内存中的储存形式和读取形式
// 进行指针运算的时候不一样(后面说)
// int类型指针强转成long类型后相当于long指针
// 2.直接访问,间接访问
// 直接访问就是使用变量名进行范文里面的数据
// int num =10; printf("%d\n",num);
// 间接访问就是使用地址,来获取地址所指向的内存中得数据
// 取值运算符* 语法: *地址(*指针变量)
// int num =10; int *p =# printf("%d\n",*p);
// 是p指向num,而不是*p指向num
// *p == num
// 间接访问是访问地址表示的数据,可以获取也可以修改
// 3.指针的常用用法
#include <stdio.h>
// 1>.指针可以用于统一的引用变量
// int *p;
// p = &任何int类型的变量;
// *p1 + *p2
// 2>.在函数中使用指针变量作为参数,以备函数中对变量的影响在函数结束后保留(利用参数返回)
// 3>.使用指针减少函数的参数传递
// void func (参数){...}//指针(地址)的格式比较统一
// 4>.引用数组\结构\函数等复杂的数据域代码
// *需要掌握的是前4种
// 5>.使用指针使用动态的内存(不需要太在意,这是C得高级用法,OC会简化)
// 6>.使用指针实现高级数据结构(链表\队列\栈\图\环\树...)
4. 指针与数组
int test()
{
// 数组就是特殊的指针
// 区别在于,指针是变量,而数组名是个常量*nums++这种用法是不允许的
// 遍历字符串:
char chs[] = "hello iOS";
char *p = chs;
while(*p !='\0')
{
printf("%c",*p++);
}
char chs1[20];
char *p2 = chs1;
while (*p2++ = *p++);
return 0;
}
// 数组是占内存空间的,一共需要单位字节数*数组长度
// 而指针固定8个字节(64位)
// 已经学过的指针概念
//1.指针
//2.指针变量
//3.指向XXX的指针
//
//指针在前面,表达的涵义是值为指针
//指针在后面表达指向的意思
//
//指针数组 数组里元素是指针
//数组指针
//指针函数 函数返回值是指针
//函数指针
5. const对指针的影响(技巧知识点)
int main()
{
//const在变量上
int const num1 = 0;
const int num2 = 0;
//C语言是一个形式化的语言
const int *p1; // 这种指针失去了修改指针指向变量值的能力
int const *p2; // 这种指针失去了修改指针指向变量值的能力
int *const p3; // 这里const修饰的是p3,那么这种指针指向的变量不可更改,失去了随意指向的能力
const int *const p4; //修改能力和转向能力都失效
return 0;
}
本文详细介绍了C语言中的指针概念,包括指针的基本原理、指针变量的使用方法、指针与数组的关系以及const对指针的影响。通过实例讲解了如何正确地使用指针,帮助开发者掌握这一核心概念。
552

被折叠的 条评论
为什么被折叠?



