(IOS自学)C语言基础学习篇——指针
来源:互联网 发布:手机淘宝网店认证 编辑:程序博客网 时间:2024/05/18 03:08
指针的概念理解:
内存单元的编号叫做地址。根据内存单元的编号或者地址就可以找到所需的内存单元,所以通常也把地址称为指针。
指针的好长:
1)为函数修改调用变量的灵活手段。
2)让函数有多个返回值。
3)可以改善某些子程序的效率。在数据传递时,如果数据快大,使用指针传递地址而不是实际数据,即提高传输速度,又节省大 量的 的内存。
4)为动态数据结构提供支持(如二叉树,链表等)。
指针变量:
在C语言中,允许一个变量来存放指针,这中变量就是指针变量。因此,一个指针变量的值就是某个内存单元的地址或某内存单元 的指针。
注意:
1)严格意义来说,指针就是一个地址,一个常量。
2)针变量存放一个地址,是一个变量。
指针变量定义格式
类型说明符 *变量名 例如: int *a;
注意实现:
1)在定义指针变量时,*代表定义的变量时指针变量,变量的值只能存放地址。
2)一个类型的指针只能指向同类型的变量,不能指向其他类型的变量。
3)指针变量也可以声明为全局、静态局部
指针实现两个变量值的交换
代码实现:
#include <stdio.h>void swap(int *t,int *t1){ int temp; temp = *t; *t = *t1; *t1 = temp; }int main(int argc, const char * argv[]) { int a = 10; int b = 20; printf("交换前:a=%d,b=%d\n",a,b); swap(&a,&b); printf("交换后:a=%d,b=%d\n",a,b); return 0;}
指针的应用场景
1)在被调函数中可以修改主调函数的变量的值
代码实现:
#include <stdio.h>void changValue(int *t){ *t = 100; }int main(int argc, const char * argv[]) { int a = 1; int *p = &a; //p指向a printf("%d\n",*p); changValue(p); printf("%d\n",*p); printf("%d\n",a); return 0;}运行结果:
2)让函数又多个返回值
代码实现
#include <stdio.h>void caculator(int a,int b, int *add,int *sub,int *mcl,float *div){ *add = a+b; *sub = a-b; *mcl = a*b; *div = a/(float)b;}int main(int argc, const char * argv[]) { int add = 0; int sub = 0; int mcl = 0; float div = 0.0f; caculator(10,4,&add,&sub,&mcl,&div); printf("add =%d\n",add); printf("sub =%d\n",sub); printf("mcl =%d\n",mcl); printf("div =%.2f\n",div); return 0;}
二级指针
如果一个指针变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针的指针变量。也称为二级指针。
指针为什么要区分类型?
在同一个编译器下,一个指针变量所占的内存空间是固定的。在64位系统下,指针变量都是占用8个字节。但不同的类型的变量 却占不同的字节数。
数组指针的运用
实现逆序数组
代码实现
#include <stdio.h>void exchangeArrOrder(int arr[],int len){ int temp; int i = 0; int j = len-1; int *p = arr; while (i<j) { temp = *(p+i); *(p+i) = *(p+j); *(p+j) = temp; i++; j--; } }int main(int argc, const char * argv[]) { int arr[10] = {1,2,3,4,5,6,7,8,9,10}; exchangeArrOrder(arr, 10); for (int i=0; i<10; i++){ printf("%d\t",arr[i]); } return 0;}
一维指针数组
一个数组的元素值为指针则是指针数组。指针数组是一组有序的指针集合。指针数组的所有元素都必须是具有相同存储类型和 指向相同数据类型的指针变量。
形式:
int a = 3;int b = 6;int c = 7;int d = 8;int *a[4] = {&a,&b,&c,&d}
1 0
- (IOS自学)C语言基础学习篇——指针
- (IOS自学)C语言基础学习(一)
- (IOS自学)C语言基础学习(二)
- [黑马IOS自学第六篇]C语言指针,数组指针,字符指针学习
- IOS学习---C语言基础学习7(指针)
- C语言入门——指针(一)自学总结
- 黑马程序员——IOS基础---C语言学习之复杂数据类型之指针
- 黑马程序员——ios基础---C语言:字符串、指针
- iOS基础(c)—指针
- 黑马程序员IOS基础---C语言学习之指针
- C语言基础学习——第5天(指针)
- 黑马程序员——ios学习笔记 C语言 指针
- 黑马程序员——IOS学习笔记(C语言指针)
- ios学习路线—C语言(函数,数组,字符串,指针)
- 黑马程序员-iOS基础-C语言基础(五)指针
- 自学ios——基础篇
- ios开发之c语言基础-指针
- IOS之C语言--10指针基础
- set集合中的contains操作
- 百度地图-----密钥申请
- opengl入门3
- ListView 中两个重要方法
- unity3d射线的原理用法以及一个利用射线实现简单拾取的小例子
- (IOS自学)C语言基础学习篇——指针
- c语言静态变量和静态函数
- opengl入门4
- ES6学习——集合(Collections):WeakSet
- 如何使用Cocoapods
- 汇编指令与机器码
- opengl入门5
- 利用射线实现鼠标控制角色转向和移动
- 求多项式相加的迭代算法