iOS——指针
来源:互联网 发布:dijkstra算法步骤s=, 编辑:程序博客网 时间:2024/05/23 22:57
指针: 内存中最小存储单元叫做字节,为了方便操作内存中的数据,生产商对每一个内存中的存储单元进行编号,这个编号就叫做地址,地址其实就是指针,指针就是地址;
访问内存中的数据有两种方式: 直接访问和间接访问
& 叫做取地址符号
&a 就是取到a的地址,并且返回
%p 是地址的占位符,打印地址的时候使用;
什么是指针变量: 指针变量就是存放地址的变量
如何定义一个指针变量:
// 类型修饰符 *指针变量名 = 初始值;
// 在定义指针变量的时候,*就是一个指针的标示符,告诉编译器,这是个指针变量;
int *p = NULL;
printf ( “%p\n”,p ); // 取出变量b的地址,赋值给指针变量p;
p = &b;
printf ( “b地址 = %p , p地址 = %p \n”,&b,p ) // 直接访问
* * 取值运算符* *p 取出p指向的那块内存中存储的数据printf("%d\n",*p);// 定义整型的指针变量int *p2 = NULL;int *p3 = NULL;int c = 20,d = 30;p2 = &c;p3 = &d;printf("%d,%d\n",*p2,*p3); // printf("%p\n",&a); // 指针变量的重新赋值,叫做指针的重指向; p2 = p3;printf("%d\n",*p2);
// 练习1:使用指针交换整型变量a,b的值
/*
int a = 10,b = 8;
int *p1 = NULL;
int *p2 = NULL;
p1 = &a;
p2 = &b;
int temp = *p1;
*p1 = *p2;
*p2 = temp;
printf(“a = %d,b = %d\n”,a,b);
*/
// 练习2: 赋值
/*
int a = 6,b = 8,c = 10;
int *p = &a;
p = &c;
int *p1 = &b;
int *p2 = &c;
*p2 = 5;
*p = 12;
p = p1;
*p1 = *p + *p2;
printf(“%d %d %d\n”,a,b,c);
*/
指针常见的问题:
内存编号比较小的内存单元,是由系统控制的,不允许访问
/ / int *p = NULL; NULL是最小的地址 0X0000000
指针变量在内存中所占空间的大小与变量类型并没有关系,只与操作系统位数有关,64位系统占8字节,32位系统占4字节。
定义指针变量时,指针类型修饰符一定要和它指向的那块空间变量的数据类型一眼个只有遮掩刚才能完整把那块空间里的数据取出来,总结一句话: 什么类型的指针指向什么类型的变量。
int a = 2;
char *p = &a ; 不合法!
指针的算术运算:
类型修饰符的种类决定指针变量做+1操作时跳转多少个字节
int+1跳转4个 float: 4个 char 1个 ·····
nt *p1 = NULL;
printf(“%p\n”,p1); // 0x0
printf(“%p\n”,++p1);
// 0x4 等同于 p1 = p1 +1; 已经重新进行赋值,指针的值已经改变了
printf(“%p\n”,p1++); // 0x4
printf(“%p\n”,p1); // 0x8
*/
// p+1 ++p p++ 的关系:// 相同: 取到的都是下一个空间的首地址// 不相同: p+1没有造成指针的重指向,而p++和++p都造成了指针的重指向;
// 通过指针变量p来访问数组中的元素:
printf("%d\n",*p);printf("%d\n",*(p+1));printf("%d\n",*(p+2));printf("%d\n",*(p+3));printf("%d\n",*(p+4));printf("遍历:\n");for (int i = 0; i < 5; i++) { printf("%d\t",*(p+i));}printf("\n");
数组名和指向数组首地址的指针变量的区别:
* 数组名是一个指针常量,不能修改* 指向数组首地址的指针变量是可以重指向的,可改变;
int a[5] = {1,2,3,4,5};
int *p = NULL;
printf(“%lu\n”,sizeof(a) ); // 20
printf(“%lu\n”,sizeof( p) ); // 8
用指针冒泡排序:
// 有10个元素的整型数组,通过指针变量为数组随机赋值[20 40], 然后冒泡排序
int a[10] = {0};int *p = a;for (int i = 0; i < 10; i++) { *(p+i) = arc4random_uniform(40-20+1)+20; }for (int i = 0; i<9; i++) { for (int j = 0; j<9-i; j++) { if (*(p+j)>*(p+j+1)) { int temp = *(p+j); *(p+j) = *(p+j+1); *(p+j+1) = temp; } }}for (int i = 0; i<10; i++) { printf("%d\t",*(p+i));}printf("\n");
使用 %s 打印字符串,从指针指向的那个地址开始打印:
char string[] = “qingrenjiekuaile”;
printf(“%s\n”,string);
printf(“%s\n”,string + 1);
printf(“%c\n”,*(string + 1));
打印的结果分别是:
qingrenjiekuaile
ingrenjiekuaile
i
- iOS——指针
- iOS——指针进阶
- iOS——结构体指针
- iOS基础(c)—指针
- C语言回顾(六、基类型,数组指针,字符串指针,函数指针,文字常量区)——iOS开发基础
- 【IOS 开发学习总结-OC-7.11-★】 objective-c——指针数组和指向指针的指针
- 黑马程度员——ios基础—— 指针
- 黑马程序员 ——ios基础 ——指针
- 黑马程序员——IOS基础(地址和指针)
- iOS开发学习第九课——指针
- iOS开发学习第十课——高级指针
- 黑马程序员——ios学习笔记 C语言 指针
- 黑马程序员——ios基础---C语言:字符串、指针
- 黑马程序员——IOS学习笔记(C语言指针)
- ios学习路线—C语言(函数,数组,字符串,指针)
- 黑马程序员——零基础学习iOS开发——06 字符串、指针、指针和数组、指针和字符串、指针和函数
- 指针——钻石指针
- <C语言>特殊指针——const指针、void指针、NULL指针、零指针、野指针
- Oracle EBS 交叉币种(1)-基础设置
- Solr之——solrj操作中的各个操作大全(在solrcores中测试)
- sphinx 配置文件全解析
- iOS——结构体
- python的开发手册 pydoc
- iOS——指针
- 史上最易懂的Android jni开发资料--NDK环境搭建
- HP刀片服务器系统Flex-10 VC配置与VMware vSphere网络设计
- 阴阳
- iOS——函数
- javaweb中静态文件的常用处理方法汇总
- .NET学习(八)UpdatePanel组件的使用
- 【codechef】s=abs(这部分数-剩下的数),求所有选取方式的s之和
- 多边形重心问题