1、数组的本质
![这里写图片描述](https://img-blog.csdn.net/20171017195058651?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenkxMzI3MDg2Nzc4MQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
#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、指针与整数运算
![这里写图片描述](https://img-blog.csdn.net/20171017195112259?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenkxMzI3MDg2Nzc4MQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
3、指针与指针运算
![这里写图片描述](https://img-blog.csdn.net/20171017195124354?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenkxMzI3MDg2Nzc4MQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
4、指针比较
![这里写图片描述](https://img-blog.csdn.net/20171017195909086?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenkxMzI3MDg2Nzc4MQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
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);
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、小结
![这里写图片描述](https://img-blog.csdn.net/20171017195157649?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenkxMzI3MDg2Nzc4MQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
6、数组访问方式
![这里写图片描述](https://img-blog.csdn.net/20171017200846518?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenkxMzI3MDg2Nzc4MQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
7、下标访问与指针访问
![这里写图片描述](https://img-blog.csdn.net/20171017200859957?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenkxMzI3MDg2Nzc4MQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
8、a和&a的区别
![这里写图片描述](https://img-blog.csdn.net/20171017200912247?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenkxMzI3MDg2Nzc4MQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
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、数组参数
![这里写图片描述](https://img-blog.csdn.net/20171017200923499?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenkxMzI3MDg2Nzc4MQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
#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、小结
![这里写图片描述](https://img-blog.csdn.net/20171017200936137?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenkxMzI3MDg2Nzc4MQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)