D17. 指针(2)

5.
//int main()
//{
//	int a[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 9, 8 };
//	int *p = &a[0][0];
//	int i, j;
//	//for (i = 0; i < 3 * 4; ++i)//看二维数组不方便
//	//	printf("%d", *(p+i));
//	for (i = 0; i < 3; ++i)
//	{
//		for (j = 0; j < 4; ++j)
//		{
//			printf("%d", *(p + i * 4 + j));//单指针指向二维数组
//		}
//		printf("\n");
//	}
//	system("pause");
//	return 0;
//}
//6.
//char a[] = { '1', '2', '3', '4', '5' };
//字符数组不一定要有结束符, 字符串一定要有结束符
//char b[5] = "12345"; 越界
//char b[5] = "1234"; 有\0, 没有越界
//strlen(b)比5大, 没意义
//char a[] = "123"; 把字符串"123"放在a开辟的4个空间里
//char *p = "123"; p指向字符串首元素地址, 也就是1的地址
//char *p;
//p = "123"; 可以,数组不可以这样初始化
7.笔试题
int main()
{
	char a[] = "123";
	char b[] = "123";
	const char c[] = "123";
	const char d[] = "123";
	char *p = "123";
	char *q = "123";
	const char *pp = "123";
	const char *qq = "123";
	if (a == b)
		printf("a==b\n");
	if (c == d)
		printf("c==d\n");
	if (p == q)
		printf("p==q\n");
	if (pp ==qq)
		printf("qq==pp\n");
	if (p == pp)
		printf("p==pp\n");
	system("pause");
	return 0;
}
#include<stdio.h>
#include<stdlib.h>

//1.
//int main()
//{
//	int a[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 7, 6 };// 二维数组名a是 int(*p)[4] 类型
//	int(*p)[4];
//	int i, j;
//	p = a;
//	for (i = 0; i < 3; i++)
//	{
//		for (j = 0; j < 4; j++)
//		{
//			printf("%d", *(*(p + i) + j));
//		}
//		printf("\n");
//	}

//注意指针变量的当前值
//for (p = a; p < a + 3; p++)//比二维数组名多一个操作可以自加,数组名不可以自加
//{
//	for (j = 0; j < 4; j++)
//	{
//		printf("%d", *(*p + j));
//	}
//	printf("\n");
//}
//
//	system("pause");
//	return 0;
//
//}

//2. 数组传参数
//void output(int arr[][4]){}
//void output(int(*p)[4]){}
//
//int main()
//{
//	int arr[3][4] = { 1, 4, 2, 3, 5, 6, 7, 8, 9, 0, 9, 8 };
//	output(arr);
//	system("pause");
//	return 0;
//}

//3.变指向来实现交换
//int main()
//{
//	char *tmp = NULL;
//	char *p = "111";
//	char *q = "222";
//	tmp = p;
//	p = q;
//	q = tmp;
//	printf("%s,%s\n", p, q);//%s
//	system("pause");
//	return 0;
//}
//4.
//void test(int a[100])// int * 类型
//{
//	printf("%d\n", sizeof(a));//4
//}
//
//int main()
//{ 
//	int a[100];
//	printf("%d\n", sizeof(a));//400
//	test(a);//传首地址
//	system("pause");
//	return 0;
//}


// 二级指针
//int main()
//{
//	int a = 5;
//	int *p = &a;
//	int **q = &p;
//	printf("%d   %d   %d\n", a, *p, **q);
//	system("pause");
//	return 0;
//}
//5.
//int main()
//{
//	int a[5] = { 1, 2, 3, 4, 5 };
//	int *q[5] = { &a[0], &a[1], &a[2], &a[3], &a[4] };
//	for (int i = 0; i < 5; i++)
//	{
//		printf("%2d", **(q + i));
//	}
//	system("pause");
//	return 0;
//}

//6 指针类型不一样,加1就不一样
int main()
{
	int a = 6;
	int *p = &a;
	printf("%p\n", p);
	printf("%p\n", p+1);//加4个字节
	printf("%p\n", (unsigned long)p + 0x1);//加数字 1
	printf("%p\n", (short *)p + 0x1);//加 2个字节
	system("pause");
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值