28-29-指针和数组

1、数组的本质

这里写图片描述

#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;
}
a = 0x4A6D54F0
a + 1 = 0x4A6D54F4
p = 0x0
p + 1 = 0x4
2、指针与整数运算

这里写图片描述

3、指针与指针运算

这里写图片描述

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
    printf("%d\n", p0 - p2);   
   // printf("%d\n", p0 - p);  //ERROR
    //printf("%d\n", p0 * p2); //ERROR
    //printf("%d\n", p0 / p2); //ERROR

    return 0;
}
-3
-16
#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;
}

pBegin = 0x7ffdde8ffa10
pEnd = 0x7ffdde8ffa15
Size: 5
Hello
5、小结

这里写图片描述

6、数组访问方式

这里写图片描述

7、下标访问与指针访问

这里写图片描述

8、a和&a的区别

这里写图片描述

#include <stdio.h>

int main()
{
    int a[5] = {1, 2, 3, 4, 5};
    int* p1 = (int*)(&a + 1); 
    int* p2 = (int*)((int)a + 1);
    int* p3 = (int*)(a + 1);

    printf("%d, %d, %d\n", p1[-1], p2[0], p3[1]);

    return 0;
}
// A. 数组下标不能是负数,程序无法运行
9、数组参数

这里写图片描述

#include <stdio.h>

void func1(char a[5])
{
    printf("In func1: sizeof(a) = %d\n", sizeof(a));

    *a = 'a';

    a = NULL;
}

void func2(char b[])
{
    printf("In func2: sizeof(b) = %d\n", sizeof(b));

    *b = 'b';

    b = NULL;
}

int main()
{
    char array[10] = {0};

    func1(array);

    printf("array[0] = %c\n", array[0]);

    func2(array);

    printf("array[0] = %c\n", array[0]);

    return 0;
}
In func1: sizeof(a) = 8
array[0] = a
In func2: sizeof(b) = 8
array[0] = b
10、小结

这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值