#include<stdio.h>
#include<stdlib.h>
//1.
int main1()
{
char *c[] = { "ENTER", "NEW", "POINT", "FIRST" };
char **cp[] = { c + 3, c + 2, c + 1, c };
char ***cpp = cp;
printf("%s\n", **++cpp);//%s,从当前位置开始遇到\0 结束
printf("%s\n", *--*++cpp + 3);
printf("%s\n", *cpp[-2] + 3);//*cpp[-2] + 3 -> **(cpp-2)+3
printf("%s\n", cpp[-1][-1] + 1);//cpp[-1][-1]+1 -> *(*(cpp-1)-1)+1
system("pause");
return 0;
}
//2.
int main2()
{
int a[3][2] = { (0, 1), (2, 3), (4, 5) };//逗号表达式,int a[3][2]={1,3,5,0,0,0}
int *p = a[0];//&a[0][0]
printf("%d\n", p[0]);//p[0] -> *(p+0)
system("pause");
return 0;
}
//3.
int main3()
{
int a[] = { 1, 2, 3, 4 };
int *p1 = (int *)(&a + 1);//一维数组名取地址相当于行指针,行指针加1加了一行
int *p2 = (int *)((int)a + 1);//整型加1,地址加了1
printf("%x,%x\n", p1[-1], *p2);//小端存储
system("pause");
return 0;
}
//4
int main()
{
char *str[] = { "welcome", "to", "Fortemedia", "Nanjing" };
char **p = str + 1;
str[0] =(*p++) + 2;//p++ 还在p
str[1] = *(p + 1);
str[2] = p[1] + 3;
str[3] = p[0] + (str[2] - str[1]);//两个指针指向同一个数组,可以相减,结果为两个指针数组之间的元素数目
printf("%s\n", str[0]);// \0在屏幕上不显示
printf("%s\n", str[1]);
printf("%s\n", str[2]);
printf("%s\n", str[3]);
system("pause");
return 0;
}