文档章节

第09天C语言(01):指针和数组

lyh2017iOS
 lyh2017iOS
发布于 2017/07/05 09:57
字数 728
阅读 6
收藏 0

#pragma mark 指针和数组 ###pragma mark 概念

###pragma mark 代码

#include <stdio.h>
int main()
{
#warning 指针和数组
#warning 定义一个指针指向数组
    /*
    int num = 10;
    int *numP = #
    num = 55;
    *numP = 100;
    printf("%i\n",num);
    printf("%i\n",*numP);
    
    int ages[3] = {1,3,5};
    // 数组名称就是数组的地址,数组的地址就是首元素的地址
    printf("ages = %p\n",ages);
    printf("&ages[0] = %p\n",&ages[0]);
    
    // 指针是专门用于保存地址
    // 数据类型 *变量名称;
    // 由于数组的首元素的地址就是数组的地址,所以定义一个指针指向数组其实就是定义一个指针指向数组的首元素,所以数组的首元素是什么类型,那么指向指向数组的指针就是什么类型.
//    int *p = &ages[0];
    int *p = ages;
    printf("p = %p\n",p);
    printf("&ages[0] = %p\n",&ages[0]);
     */
#warning 如何利用指针操作数组 方式1
    /*
    int ages[3] = {1,3,5};
    ages[0] = 998;
    // 相当于 0x7fff5fbff79c[0]
    printf("ages[0] = %i\n",ages[0]);
    
    int *p = ages; // int *p = &ages[0]; &ages == ages
    printf("p = %p\n",p);
    printf("ages = %p\n",ages);
    
    // 因为p指针中存储的值和ages中存储的值相同,所以以前用ages的地方都可以使用p来替代
    p[0] = 221;
    // 相当于 0x7fff5fbff79c[0]
    printf("age[0] = %i\n",p[0]);
    
    for (int i = 0; i < 3; i++) {
        printf("p[%i] = %i \n",i,p[i]);
    }
     */
#warning 方式2
    
    /*
    int ages[3] = {1,3,5};
    int *p = ages; //int *p = &ages[0];
    printf("ages[0] = %i\n",ages[0]);
    printf("*p = %i\n",*p);
    
    printf("指针加1之前 p = %p\n",p);
//    p = &ages[1];
    // 指针+1, 并不是真实的+1,而是+4
    // 指针+1, 其实是加上指针类型所占用的长度
    // 指针类型的两个用途: \
    第一个用途 : 取值的时候, 会根据指针类型所占用的字节 去 取出对应字节的数据 \
    第二个用途, 用于做加法运算, 指针+1 , 其实是加上指针类型所占用的长度,如果当前指针类型是int,  那么+1本质上是加上4个字节
    
    p = p + 1;
    printf("指针加1之后 p + 1 = %p\n",p);
    printf("*p = %i\n",*p);
//    p = &ages[2];
    p = p + 1;
    printf("指针加1之后 p + 2 = %p\n",p);
    printf("*p = %i\n",*p);

    
    int a = 10;
    a = a + 1;
    printf("a = %i\n",a);   // 11
     */
    
    /*
    int num = 10;
    int *numP = #
    printf("num = %i\n",num);
    // *numP 代表访问numP之乡的那块内存空间
    printf("*numP = %i\n",*numP);
     */
 
    /*
    char c = 'a';
    char *cp = &c;
    printf("cp = %p\n",cp);
    cp = cp + 1;
    printf("cp  + 1 = %p\n",cp);
    cp = cp + 1;
    printf("cp  + 1 = %p\n",cp);
     */
    
    int ages[3] = {1,3,5};
    int *p;
    p =ages;
    /*
    printf("age[0] = %i\n", *p + 0);
    printf("age[i] = %i\n", *(p + 1)); // p = p + 1; *p;
    printf("age[2] = %i\n", *(p + 2)); // p = p + 1; *p;
     */
    /*
    for ( int i = 0 ; i < 3; i++) {
        printf("ages[%i] = %i\n",i,*(p + i));
    }
     */
    
    /*
     只要一个指针指向了数组,那么访问数组就有3种方式:
     1 : ages[0];
     2 : p[0];
     3 : *(*p + 0);     // 大神的写法 另一种访问方式 0[p]
     */
    
    
    printf("age[0] = %i\n",0[p]);
    
    return 0;
}

© 著作权归作者所有

共有 人打赏支持
lyh2017iOS
粉丝 1
博文 357
码字总数 137380
作品 0
朝阳
JavaScript 30天每日效果图

JavaScript 30天每日效果图 在Github上看到了wesbos的一个Javascript30天挑战的repo,旨在使用纯JS来进行练习,不允许使用任何其他的库和框架,该挑战共30天,我会在这里复现这30天遇到的挑战...

黎跃春
2017/07/19
0
0
[iOS]C语言知识点系列视频整理

C语言知识点系列视频 目录 C语言技术视频-01-变量的定义 C语言技术视频-02-程序分支结构(if...else) C语言技术视频-03-程序分支结构(switch) C语言技术视频-04-程序循环结构(while{}) C语言技...

浩浩老师
2015/10/13
38
0
C语言数组与指针一本道来

数组与指针.png 一本道来其他系列 C语言关键字 C语言注释符号一本道来 C语言编译预处理技术一本道来 指针的基础 注意本节内容可能在gcc下不能完成编译,请切换到Windows平台,使用或其他 指针...

PcDack
2017/12/04
0
0
指针的使用

1.指针与别名陷阱 如果有一块内存区域,指向这块内存区域的指针有多个,其中每一个指针都是其他指针的别名。 别名操作在优化程序是会造成很多麻烦,如下面的例子: 上面的两段代码,第一段访...

大道无名
2016/10/22
10
0
十三、指针和字符串

说明:这个C语言专题,是学习iOS开发的前奏。也为了让有面向对象语言开发经验的程序员,能够快速上手C语言。如果你还没有编程经验,或者对C语言、iOS开发不感兴趣,请忽略 字符串回顾 一个字...

长平狐
2013/03/28
51
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

最全最强解析:支付宝钱包系统架构内部剖析(架构图)

支付宝系统架构概况 典型处理默认 资金处理平台 财务会计 支付清算 核算中心 交易 柔性事务 支付宝的开源分布式消息中间件–Metamorphosis(MetaQ) Metamorphosis (MetaQ) 是一个高性能、高可...

晨猫
40分钟前
5
0
竞品分析

那什么样的场景需要用关键纬度分析法分析竞品呢? 竞品分析的目的是为了看竞品们和自己产品重合的业务都具备哪些功能点,以及这些功能是怎么做的,以此确定自己产品的优化方向。 竞品们的业务...

于谦老师
47分钟前
1
0
OSChina 周三乱弹 —— 公司女同事约我

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子:分享水木年华的单曲《蝴蝶花(2002年大提琴版)》 《蝴蝶花(2002年大提琴版)》- 水木年华 手机党少年们想听歌,请使劲儿戳(这里) ...

小小编辑
今天
1K
17
Linux环境搭建 | VMware下共享文件夹的实现

在进行程序开发的过程中,我们经常要在主机与虚拟机之间传递文件,比如说,源代码位于虚拟机,而在主机下阅读或修改源代码,这里就需要使用到 「共享文件」 这个机制了。本文介绍了两种共享文...

良许Linux
今天
9
0
JUC锁框架——AQS源码分析

JUC锁介绍 Java的并发框架JUC(java.util.concurrent)中锁是最重要的一个工具。因为锁,才能实现正确的并发访问。而AbstractQueuedSynchronizer(AQS)是一个用来构建锁和同步器的框架,使用A...

长头发-dawn
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部