一、数组的本质
编程实验: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);:
五、小结:
本文为听课笔记,课程出处: