iOS开发学习之C语言---C07 指针-1

//

//  main.m

//  C07 指针-1

//

//  Created by 康亮亮 on 15/10/15.

//  Copyright (c) 2015 Darling.com. All rights reserved.

//


#import <Foundation/Foundation.h>


int main(int argc, const char * argv[]) {

#pragma mark 一、指针变量

    /*

     指针:指针就是内存单元编号的另一种称呼。每个内存单元都有一个编号,这个编号就是内存单元的地址,也被称作指针。

     指针变量: 用来保存内存单元地址的变量,就是指针变量。

     */

    

    // 定义一个指针变量

    int a = 12;

    /* int * : 类型声明符,表示标量p是一个整形指针变量

     int :告诉系统,在取值时,应该从当前位置连续取多少字节的数据。int表示连续取4个字节。

     p:变量名,一般我们将指针类型的变量名取名叫p

     NULL : C语言中,使用NULL代替的意思,将NULL赋给指针,则指针此时保存的是内存起始地址,指针指向内存起始位置。

     /  注意:指针变量所占字节数只与操作系统的位数有关!!!(64位环境下占8字节,32位环境下占4字节)*/

    int *p = NULL;

    printf("%lu\n", sizeof(p)); // %lu表示输出无符号长整型整数

    // 使用%p作为占位符,来打印指针变量所保存的地址

    printf("%p\n", p); // %p一般以十六进制整数方式输出指针的值;打印结果0x0,表示内存的起始位置

    

    // 将整形变量a的地址,交给整形指针变量p保存

    // & :取地址符号,将后边变量的地址取出来,交给指针保存

    p = &a;

    printf("%p\n", &a);

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

    

    // * :取值运算符,将指针所指向的内存地址中保存的数据取出来

    // 注意:*在不同位置的含义不同,出现在指针定义的位置,表明声明后边的变量名是一个指针; 如果*前面没有类型修饰符,则表示取出指针所指向的地址的数值

    int b = *p;

    printf("a = %d\n", a);

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

    printf("b = %d\n", b);

    

    // 使用指针修改变量a的值:*p访问到a得值,然后再修改

    *p = 23;// a = 23;

    printf("a = %d\n", a);

    

    // 指针重指向

    int c = 99;

    p = &c; // 指针重指向,从指向a,变为指向c

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

    

    

    

#pragma mark 指针的算术运算

    p++; // 对指针变量进行加法操作,指针p所保存的地址将会加上若干个单位的字节数,每个单位占用的字节数取决于指针的类型。 指针从低地址向高地址挪动。

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

    

    p--; // 对指针变量进行减法操作,指针p所保存的地址将会减去若干个单位的字节数,每个单位占用的字节数取决于指针的类型。 指针从高地址向低地址挪动。

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

    

    // 普通的加减运算:如果没有小括号干扰优先级,则先取值,再将值进行加减运算操作

    // 自增、自减运算:先处理自增、自减 ,处理完成后,再进行取值运算

    int temp = * p++;

    printf("temp = %d\n", temp);

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

    

    int temp1 = *p+3;

    printf("temp1 = %d\n", temp1);

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

    

    int temp2 = *(p+3);

    printf("temp2 = %d\n", temp2);

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

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    return 0;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值