28 指针和数组分析(上)

一、数组的本质



 编程实验:a+1的结果什么?

#include <stdio.h>

int main()
{
    int a[5] = {0};
    int* p = NULL;
    
    printf("a = 0x%X\n", (unsigned int)(a)); //a = 0x39F8A0
    printf("a + 1 = 0x%X\n", (unsigned int)(a + 1)); //a + 1 = 0x39F8A4;增加了4个内存
    
    printf("p = 0x%X\n", (unsigned int)(p));//p = 0x0
    printf("p + 1 = 0x%X\n", (unsigned int)(p + 1));//p + 1 = 0x4;指针运算,增加了4个内存
    
    return 0;
}

输出:

实验结果分析:

套用指针运算公式,

二、指针的运算


 


三、指针之间的运算:



四、指针之间的比较:

 编程实验:指针运算初探

#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; //指向s1的第一个元素
    char* p1 = &s1[3]; //指向s1的第三个元素
    char* p2 = s2; //指向s2的第一个元素
    int* p = &i;  //指向i
	
    printf("%d\n", p0 - p1); //指向同一个数组的元素,可以运算
    printf("%d\n", p0 + p2); //指针之间不支持加法运算
    printf("%d\n", p0 - p2); //指向不同的数组元素,不合法
    printf("%d\n", p0 - p); //指向的类型不一样,不合法
    printf("%d\n", p0 * p2); //不支持乘法运算
    printf("%d\n", p0 / p2); //不支持除法运算
	
    return 0;
}

输出:

 编程实验:指针运算的应用

#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 //pEnd指向最后的元素的下一位
    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;
}

输出:

结果分析:

 计算char* pEnd = s + DIM(s);:



 五、小结:

本文为听课笔记,课程出处:

https://item.taobao.com/item.htm 

猜你喜欢

转载自blog.csdn.net/qq_40416052/article/details/83581355
28