内存的访问形式:1、直接访问:通过变量名进行访问。2、间接访问:先找到变量存放的地址,然后根据地址去访问对应的内存空间。

指针---

// 定义一个整形指针变量,用来存储num1在内存中的地址
    int *p = NULL; // 定义一个整形指针变量,指向0x0,NULL恒等于0
    
    printf("%p\n", p); // 输出指针变量的值,使用"%p"
    printf("&num1 = %p\n", &num1); // 取址运算符,取得变量所在的内存地址
    p = &num1; // 给整形指针变量重新赋值
    printf("p = %p\n", p);
    printf("*p = %d\n", *p); // "*"取值运算符,取出地址里面存储的数据
    // 当我们定义指针变量的时候,"*"只是起一个标识作用,告诉我们这个变量是一个指针变量。
    // 当我们使用指针变量的时候,"*"表示的是从当前地址里面取出存储的数据。

// 指针的算术运算,只有加和减
    int num1 = 100;
    int num2 = 200;
    int *p = &num2;
    printf("*p = %d\n", *p);
    printf("*(p + 1) = %d\n", *(p + 1)); // p + 1是指针向高位移动n个字节,n指的是指针指向的数据类型所占有的字节数(int *p移动4个字节, char *p1移动1个字节)
    printf("&num1 = %p\n", &num1);
    printf("&num2 = %p\n", &num2);
    printf("p = %p\n", p);
    printf("p + 1 = %p\n", p + 1);
    printf("p - 1 = %p\n", p - 1); // p - 1是指针向低位移动n个字节,n指的是指针指向的数据类型所占有的字节数(int *p移动4个字节, char *p1移动1个字节)
    printf("++p = %p\n", ++p);

// 指针和数组
    int array[3] = {1, 3, 5};
    printf("array = %p\n", array); // 数组名就是数组元素的首地址
    printf("&array[0] = %p\n", &array[0]);
    int *p = array;
    printf("%d\n", *p);
    printf("%d\n", *(p + 1));
    printf("%d\n", *p + 1);
    *(p + 2) = 6;

p[1] = 10; // 指针可以当做数组名来使用
    
    // 指针和数组的区别:所占空间不同:指针所占的空间只喝操作系统有关,数组占用的空间等于数组的元素个数*数组元素类型所占的字节数。
    // 数组名是常量地址,不能重指向。指针可以进行重指向。
    int *p1 = NULL;
//    array = p1;
    p = p1;

// 指针和字符串
    char str[10] = "iPhone"; // 把常量区的字符串"iPhone"拷贝到了栈区,所以可以进行更改
    char *p = str;
    printf("%s\n", str);
    printf("%s\n", p);
    
    *(p + 1) = 'X'; // 使用字符指针操作单个字符
    printf("%s\n", p); // 使用字符指针操作字符串
    printf("%c\n", p[3]);
    printf("%c\n", *(p + 3));
    printf("%s\n", p + 2);
    
    char *str1 = "iPhone"; // 栈区的指针str1指向常量区的某一块区域
    printf("str1 = %s\n", str1);
//    *(str1 + 1) = 'X'; // 常量不能修改
    
    printf("str = %p\n", str);
    printf("str1 = %p\n", str1);

// 指针数组
    char *strings[3] = {"iOS", "iMac", "iPad"};
    
    printf("%s\n", *strings); // 取出数组中的第一个元素(数组里面的元素是地址)
    printf("%s\n", *(strings + 1));
    printf("%s\n", *(strings + 2));
    printf("%c\n", *(*strings));
    printf("%c\n", *(*strings + 1));
    
    printf("\n\n");
    printf("%p\n", strings);
    printf("%p\n", strings + 1);
    printf("%p\n", strings + 2);

C语言 ---- 指针 iOS学习-----细碎知识点总结的更多相关文章

  1. C语言 ---- 数组 iOS学习-----细碎知识点总结

    #pragma mark - 数组:用来存放同一数据类型的数据 // 数组的定义:类型说明符 数组名[常量表达式] = {值1, 值2, 值3...};    // 定义一个float类型的数组,用来 ...

  2. C语言 ---- 循环分支 iOS学习-----细碎知识点总结

    #import <Foundation/Foundation.h>  // #import是OC种的导入头文件或者是系统框架的指令 // 定义了一个Season枚举类型enum Seaso ...

  3. C语言 ---- 函数 结构体 iOS学习-----细碎知识点总结

    函数的定义     返回值类型 函数名(形式参数列表) {        函数的实现     } 函数不允许嵌套定义 如果函数的定义在主调函数之后,那么要进行提前声明才能使用. // 匿名结构体,结构 ...

  4. C语言 ---- 基本数据类型和基本运算 iOS学习-----细碎知识点总结

    // 导入头文件(stdio.h),标准输入输出的头文件,#include <stdio.h> // 程序的入口int main(int argc, const char * argv[] ...

  5. OC ---- 字典集合 iOS学习-----细碎知识点总结

    实例方法的创建 NSDictionary *wukong = [[NSDictionary alloc] initWithObjectsAndKeys:", @"age" ...

  6. OC ---- 字符串 数组 iOS学习-----细碎知识点总结

    NSString *urlString = [NSString stringWithFormat:@"http://www.apple.com"];        // 获取字符串 ...

  7. 2017.11.14 C语言---指针的学习

    第八章 善于利用指针 (1)指针是什么 1.内存区每一个字节都有一个编号,这就是"地址".地址形象化的被称为"指针".它能通过以它为地址的内存单元.地址指向(* ...

  8. IOS学习笔记48--一些常见的IOS知识点+面试题

      IOS学习笔记48--一些常见的IOS知识点+面试题   1.堆和栈什么区别? 答:管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制:对于堆来说,释放工作由程序员控制,容易产生memor ...

  9. [转]C语言指针学习经验总结浅谈

    指针是C语言的难点和重点,但指针也是C语言的灵魂 . 这篇C语言指针学习经验总结主要是我入职以来学习C指针过程中的点滴记录.文档里面就不重复书上说得很清楚的概念性东西,只把一些说得不清楚或理解起来比较 ...

随机推荐

  1. Semaphore

    信号量玩的也是aqs的state. package com.hust.grid.leesf.semaphore; import java.util.concurrent.Semaphore; clas ...

  2. SSM框架整合首只拦路虎——Eclipse新建Maven Project界面select an archetype 空白

    首先给大家说,本篇博客没有技术价值,纯属个人学习总结,权当给大家添加一乐.事件如有雷同,纯属巧合,莫怪! 前一段时间一直在看<淘淘商城>这个教程,里面讲的是SSM框架的一个电商项目.这不是 ...

  3. YUV RGB播放器 打开, 显示RGB数据

    可以查看RGB像素数据 可以通过菜单栏打开像素数据文件,也可以通过拖拽方式打开文件.如果文件名称中包含了“{w}x{h}”这样的字符串(例如“test_320x420.yuv”),系统会自动解析为该像 ...

  4. pat甲级题解(更新到1013)

    1001. A+B Format (20) 注意负数,没别的了. 用scanf来补 前导0 和 前导的空格 很方便. #include <iostream> #include <cs ...

  5. Python爬虫学习(1): urllib的使用

    1.urllib.urlopen 打开一个url的方法,返回一个文件对象,然后可以进行类似文件对象的操作 In [1]: import urllibIn [2]: file = urllib.urlo ...

  6. CentOS利用inotify+rsync实现文件同步

    1.环境部署 inotify-master 10.10.6.208 inotify-slave 10.10.6.149 2.两台服务器都安装rsync yum install -y rsync 3.i ...

  7. PHP遍历、删除文件夹中的所有文件

    <?php header("Content-type:text/html;charset=utf-8"); /** * getDirFile 遍历文件夹中的所有文件 * @p ...

  8. 深入浅出JMS(三)--ActiveMQ简单的HelloWorld实例

    第一篇博文深入浅出JMS(一)–JMS基本概念,我们介绍了JMS的两种消息模型:点对点和发布订阅模型,以及消息被消费的两个方式:同步和异步,JMS编程模型的对象,最后说了JMS的优点. 第二篇博文深入 ...

  9. 【KMP算法】字符串匹配

    一.问题 给定两个字符串S(原串)和(模式串)T,找出T在S中出现的位置. 二.朴素算法 当S[i] != T[j]时,把T往后移一位,回溯S的位置并重新开始比较.    (1) 成功匹配的部分(AB ...

  10. BZOJ 2761: [JLOI2011]不重复数字 水题

    2761: [JLOI2011]不重复数字 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2100  Solved: 809 题目连接 http:// ...