C8_指针

指针

概念:内存有编号叫做内存的地址,内存以字节为单位

定义指针变量形式

变量类型  变量名 初始值(int * p NULL)

指针的定义方式有三种

1.int* p = NULL;

2.int *p = NULL;

3.int * p = NULL;

分清类型和变量名

指针变量所占内存大小只与系统有关

// 测试指针变量所占空间大小

printf("%lu\n", sizeof(int *));

//    printf("%lu\n", sizeof(char *));

打印地址的转义字符用%lu

指针变量的赋值

通过指针变量所存地址来访问数据

char *p = NULL;

NULL 空 恒等于0的意思

一个新的操作符*

*取值操作符(根据内存地址取内容或者取数据)

&取址操作符与*相反的操作符可以抵消掉

*p = *&a = a

指针的移动p+1或者p-1

1.不同类型的指针变量决定指针每次移动的字节数

2.决定从类型当中取多少个字节的数据

常量不可改

int *p = NULL;

*p = 5;

这两句连在一起的时候是错误的程序,因为p所指向的内存是常量, 常量存储在常量区,常量区的值是不可更改的


数组的本质

一段连续的内存

数组名:数组的首地址

array 恒等于&array【0】

// array[2]  ----- p[2] -- *(array + 2) -- *(p + 2)

//    // 语法糖

//    printf("array[2] = %d\n", array[2]);

//    printf("p[2] = %d\n", p[2]);

//    printf("*(array + 2) = %d\n", *(array + 2));

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


定义一个指针数组   数组类型 数组名【数组长度】 = {初值}

// 遍历一个数组

//    for (int i = 0; i < 3; i ++) {

//        printf("%s\n", string[i]);

//    }

   char *s1 = "iPhone";

    // s1保存的是常量串iphone的首地址

    //相当于把iPhone的地址拷贝一份赋值到指针变量s1

    // 注意事项

   char s2[] = "iPhone";

    // s2是一个栈区的数组

    // 修改s2‘p’‘P’

    s2[1] = 'p';

   printf("%s\n", s2);

    // s1 ‘P’改为‘p’

    //相当于把iphone这个字符串拷贝一份存放都s2这个数组当中

    s1[1] = 'p';//该条语句不可行,不能试图改变常量区的数据




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值