D18. 笔试题

#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;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值