C语言进阶课程学习记录-第28课 - 指针和数组分析(上)

C语言进阶课程学习记录-第28课 - 指针和数组分析(上)


本文学习自狄泰软件学院 唐佐林老师的 C语言进阶课程,图片全部来源于课程PPT,仅用于个人学习记录

数组

在这里插入图片描述

实验-指针加一

#include <stdio.h>

int main()
{
    int a[5] = {0};
    int* p = NULL;

    printf("a = 0x%X\n", (unsigned int)(a));
    printf("a + 1 = 0x%X\n", (unsigned int)(a + 1));

    printf("p = 0x%X\n", (unsigned int)(p));
    printf("p + 1 = 0x%X\n", (unsigned int)(p + 1));

    return 0;
}


/*
output:

a = 0x60FEE8
a + 1 = 0x60FEEC
p = 0x0
p + 1 = 0x4

a是数组首个元素的地址
a+1  ----> a+1*sizeof(*a)  a+1*sizeof(a[0])    a+4



*/

指针运算

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实验-同一数组的指针相互运算

#include <stdio.h>

int main()
{
    char s1[] = {'H', 'e', 'l', 'l', 'o'};
    int i = 0;
    char s2[] = {'W', 'o', 'r', 'l', 'd'};
    char* p0 = s1;
    char* p1 = &s1[3];
    char* p2 = s2;
    int* p = &i;

    printf("%d\n", p0 - p1);
   //printf("%d\n", p0 + p2);//error: invalid operands to binary + (have 'char *' and 'char *')|
    //printf("%d\n", p0 - p2);//无意义
    //printf("%d\n", p0 - p);
    //printf("%d\n", p0 * p2);
    //printf("%d\n", p0 / p2);

    return 0;
}


/*
output:
-3




*/

实验-字符串与指针

#include <stdio.h>

#define DIM(a) (sizeof(a) / sizeof(*a))

int main()
{
    char s[] = {'H', 'e', 'l', 'l', 'o'};
    char* pBegin = s;
    char* pEnd = s + DIM(s); // Key point 指向最后一个元素的后面
    char* p = NULL;

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

    printf("Size: %d\n", pEnd - pBegin);

    for(p=pBegin; p<pEnd; p++)
    {
        printf("%c", *p);
    }

    printf("\n");

    return 0;
}


/*
output:
pBegin = 0060FEEF
pEnd = 0060FEF4
Size: 5
Hello


*/

小结

数组声明时编译器自动分配一片连续的内存空间
指针声明时只分配了用于容纳地址值的4字节空间
指针和整数可以进行运算,其结果为指针
指针之间只支持减法运算,其结果为数组元素下标差
指针之间支持比较运算,其类型必须相同

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-11 23:28:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-11 23:28:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-11 23:28:02       82 阅读
  4. Python语言-面向对象

    2024-04-11 23:28:02       91 阅读

热门阅读

  1. spring基本框架搭建(思路分享)

    2024-04-11 23:28:02       38 阅读
  2. ELK日志

    ELK日志

    2024-04-11 23:28:02      35 阅读
  3. 安装hadoop,9000端口访问不了

    2024-04-11 23:28:02       36 阅读
  4. SpringMVC初始化工程

    2024-04-11 23:28:02       35 阅读
  5. armbian 一键换源

    2024-04-11 23:28:02       39 阅读
  6. 蓝桥杯 工作时长

    2024-04-11 23:28:02       32 阅读
  7. QT_day1

    QT_day1

    2024-04-11 23:28:02      37 阅读
  8. 后端上传文件使用阿里云oss存储文件(图片)

    2024-04-11 23:28:02       35 阅读
  9. 【综合分析类】一号文件:绿色发展

    2024-04-11 23:28:02       35 阅读
  10. 如何在Linux中安装NVM(Node Version Manager)

    2024-04-11 23:28:02       44 阅读