指针

首先将变量a的地址存放在另一个变量中,比如存放在变量b中,然后通过变量b来间接引用变量a,间接读写变量a的值。用来存放变量地址的变量,就称为"指针变量"

int *p=null;   初始值:null恒等于0          变量类型:整型指针 int *

指针变量所占字节数只于操作系统有关

指针类型转换符%p

printf("p = %p\n",p);

    //c语言定义指针的时候,喜欢使用p,q,r等。
int *p = NULL;
//我们通常所说的指针,指的是指针变量
//指针变量时存放内存地址(内存编号)的变量。
printf("%p",p);

取地址符&

int a = 3; int *p = &a;

取值运算符*

    int a = ;
int *p = &a;
printf("%d\n",*p);
char c = 'd';
char *q = &c;
printf("%c\n",*q);

指针的赋值代表指针的重指向。

指针的算术运算    只有加减运算

int*p = &a;         注意:指针类型决定移动几个字节

p++;//向高位移动四个字节

p--;//向低位移动四个字节

数组的内存地址

数组;用连续内存空间存储数据的构造类型                数组名:数组元素首地址

eg:int array[3]={1,3,8};//array 恒等于 &array[0]

    int arr[] = {,,,,};
int *p = arr;
*(p+) = ;//间接操作
arr[] = ;//直接操作
for (int i = ; i<; i++) {
printf("%d ",arr[i]);
}

数组名是一个常量指针 不能被修改  下面是错误写法     arr=p;  //arr是常量数组名,p是指针变量

指针与数组的区别

1.所占空间不同

-指针:只于操作系统位数有关

-数组:与元素个数和类型有关

2.数组名是常量地址,不能被赋值

思考:数组元素类型和指针类型不匹配会怎么样?

    short a[] = {,,,};
int *p1 = a;
char *p2 = a;
printf("%d\n",*p1);
printf("%d",*p2);

//输出458755         3                    从低到高   00000011   00000000    00000111    00000000     00001001  00000000   00000001   00000000

int *p1  中a变成   00000000   00000111  00000000   00000011    四个字节

char *p2   中a变成   00000011     一个字节

指针与字符串

字符指针可以操作单个字符,也可以操作字符串。

    char string[] = "iphone";//string为数组名
char *p = string;//指向字符数组首地址
*(p+) = 'v';//操作单个字符
printf("%s",p + );//操作整个字符串
//输出vphone

指针数组

存放指针的数组为指针数组

eg:char *string[3] = {"ios","android","win8"};

    char *p1 = "iOS";
char *p2 = "Android";
char *p3 = "win8";
char *string[] = {p1,p2,p3};
//char *string[3] = {"iOS","Android","win8"};
for (int i = ; i<; i++) {
printf("%s ",string[i]);
}
printf("\n %c",*(string[]+));//输出o
printf("\n %c",string[][]);//输出o

可以用指针修改字符数组,但不可修改常量字符串

指针函数

void swap(int x,int y) {
int temp = x;
x = y;
y = temp;
printf("x = %d y = %d\n",x,y);
}
void swap2(int *x,int *y)
{
printf("---*x = %d,*y = %d",*x,*y);
int temp = *x;
*x = *y;
*y = temp;
printf("---*x = %d,*y = %d",*x,*y);
}
int main(int argc, const char * argv[])
{
int a = ,b = ;
// swap(a,b);
swap2(&a, &b); printf("a = %d b = %d",a,b);

swap不能使a,b交换,,,swap2可以使a,b交换

iOS学习笔记---c语言第八天的更多相关文章

  1. iOS学习笔记---oc语言第八天

    属性 能在一定程度上简化代码,并且增强实例变量的访问安全性 属性的声明:使用@property声明属性  eg:@property NSSstring *name;相当于@interface中声明了两 ...

  2. IOS学习笔记07---C语言函数-printf函数

    IOS学习笔记07---C语言函数-printf函数 0 7.C语言5-printf函数 ------------------------- ----------------------------- ...

  3. IOS学习笔记06---C语言函数

    IOS学习笔记06---C语言函数 --------------------------------------------  qq交流群:创梦技术交流群:251572072              ...

  4. iOS学习笔记---oc语言第一天

    第一讲 初始类和对象 c语言的超集,允许在oc中使用c语言源代码.编译器兼容c语言程序 具备完善的面向对象特性 包含一个运行时系统 类库丰富 面向对象编程 oop 面向对象语言:c++  java   ...

  5. iOS学习笔记---oc语言第九天

    初级内存管理 iOS应用程序出现crash(闪退),90%以上是内存问题////其他:数组越界,方法只声明没实现 内存问题体现在两个方面:内存溢出\野指针异常 内存溢出:程序运行超出内存上限 野指针异 ...

  6. iOS学习笔记---oc语言第六天

    Block .数组高级 block本质上就是匿名函数(没有名称的函数) block语法和函数指针很相似 回顾函数 函数:C语⾔中,实现某一类功能的代码段. 完整的函数包含两部分:函数声明.函数定义 函 ...

  7. iOS学习笔记---oc语言第五天

    字典,数组 ,集排序 一.字典类 存储以下数据 name:张三; sex:男;age:18 film:风暴; playcount:10000次;price:60元 字典类用于保存具有映射关系(key- ...

  8. iOS学习笔记---oc语言第四天

    字符串 数组 一.使用苹果帮助文档 学会使⽤用苹果帮助⽂文档是开发者的⼀一项技能 Inherits from 继承⾃自 Conforms to 遵循什么协议 Framework 属于哪个框架 Avai ...

  9. iOS学习笔记---oc语言第三天

    继承.初始化方法 一.继承 继承的上层:父类  继承的下层:子类 继承是单向的,不能相互继承 继承具有传递性:A继承于B,B继承于C,A具有B和C的特征和行为 子类能继承父类全部的特征和行为(私有变量 ...

随机推荐

  1. 浅谈C++源码的过国内杀软的免杀

    以下只是简单的思路和定位.也许有人秒过,但是不要笑话我写的笨方法.定位永远是过期不了的. 其实这里废话一下 , 本人并不是大牛 ,今天跟大家分享下 .所以写出这篇文章.(大牛飘过) 只是个人实战的经验 ...

  2. HDU 1693 二进制表示的简单插头dp

    题目大意: 找到多条回路覆盖所有非障碍格子,问这样回路的种数 这里的插头与URAL1519 不一样的是 只要管它是否存在即可,只需要1个二进制位表示状态 #include <cstdio> ...

  3. Section 1.4 Packing Rectangles

    本来是USACO Training的1.4.1的,但是介于今早过了食物链想起了这道题实在是太怨念了,翻出自己写的AC程序居然有5KB!! 思路很简单,枚举,而且就图中的六种情况.但是第六种变化状况太多 ...

  4. 使用OTT处理oracle中的对象(一) OTT配置

    OTT是OCI中访问对象类型数据的重要工具,它将数据库中的对象数据类型或集合类型映射为C++中的结构体类型.OTT是Oracle自带的,但是使用前必须配置一下环境变量.在计算机->属性-> ...

  5. jQuery 通用表单方法

    表单验证一直是一个麻烦的事情,让很多人望而退步,之前想过一个验证的好方法,但是有bug,昨晚请教了juyling.com的王员外,顺利解决. 以下是js代码     function mySubmit ...

  6. scrollView自动加载数据demo

    package combaidu.mylistsrollview; import java.util.ArrayList;import java.util.List; import com.baidu ...

  7. Linksys WRT120N路由器备份文件解析

    Perusing the release notes for the latest Linksys WRT120N firmware, one of the more interesting comm ...

  8. Manacher算法 , 实例 详解 . NYOJ 最长回文

    51 Nod http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1089 Manacher 算法 定义数组 p[i]表示以i为 ...

  9. C++ algorithm 里的sort函数应用

    MSDN中的定义: template<class RanIt>    void sort(RanIt first, RanIt last); //--> 1)template< ...

  10. Storyboard的使用以及使用多个Storyboard的方法

    一, storyboard用起来很是方便.在开发中很有可能是多个人创建了多个storyboard.但最后,总是要把所有的storyboard“合并”在一起.总结一下自己的想法,不知道有没有其他的方式“ ...