C++第6天

在这里插入图片描述

1.指针和内存单元

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

#include <stdio.h>

int main(void)
{
	int a = 10;
	int* p = &a;
	*p = 2000;

	printf("a = %d\n", a);

	return 0;
}

在这里插入图片描述

在这里插入图片描述

#include <stdio.h>

int main(void)
{
	int a = 10;
	int* p = &a;

	//*p = 2000;
	a = 350;

	//printf("a = %d\n", a);
	printf("*p = %d\n", *p);

	return 0;
}

在这里插入图片描述

2.指针定义和使用

在这里插入图片描述

3.野指针和空指针

在这里插入图片描述

在这里插入图片描述

#include <stdio.h>

int main(void)
{
	int* p;
	*p = 2000;

	printf("*p = %d\n", *p);

	return 0;
}

在这里插入图片描述

int main(void)
{
	int* p = 10;
	*p = 2000;

	printf("*p = %d\n", *p);

	return 0;
}

4.万能指针/泛型指针

在这里插入图片描述

在这里插入图片描述

#include <stdio.h>

int main(void)
{
	int a = 345;

	void* p;
	p = &a;

	printf("*p = %d\n", *(int*)p);

	return 0;
}
int main(void)
{
	int ch = 'R';

	void* p;
	p = &ch;

	printf("*p = %c\n", *(char*)p);

	return 0;
}

5.const关键字

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

#include <stdio.h>

int main(void)
{
	const int a = 20;
	int* p = &a;

	*p = 650;

	printf("a = %d\n", a);

	return 0;
}

6.指针和数组

在这里插入图片描述

在这里插入图片描述

#include <stdio.h>

int main(void)
{
	int a[] = { 1,2,3,4,5,6,7,8,9,0 };
	int n = sizeof(a) / sizeof(a[0]);
	int* p = a;

	for (size_t i = 0; i < n; i++)
	{
		//printf("%d ", a[i]);
		//printf("%d ", *(a + i));
		//printf("%d ", p[i]);
		printf("%d ", *(p+i));
	}

	return 0;
}

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

int main(void)
{
	int a[] = { 1,2,3,4,5,6,7,8,9,0 };
	int n = sizeof(a) / sizeof(a[0]);
	int* p = a;

	printf("first p = %p\n", p);

	for (size_t i = 0; i < n; i++)
	{
		printf("%d ", *p);
		p++;
	}

	putchar('\n');

	printf("last p = %p\n", p);

	return 0;
}

在这里插入图片描述

int main(void)
{
	int arr[10];
	int n = sizeof(arr) / sizeof(arr[0]);
	int* p = arr;

	for (size_t i = 0; i < n; i++)
	{
		*(p + i) = 10 + i;
	}

	for (size_t i = 0; i < n; i++)
	{
		printf("%d ", *p);
		p++;
	}

	putchar('\n');

	return 0;
}

7.指针加减运算

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

#include <stdio.h>

int main(void)
{
	int a[] = { 0,1,2,3,4,5,6,7,8,9 };
	int* p = &a[5];

	printf("p - 2 = %p\n", p - 2);
	printf("&a[3] = %p\n", &a[3]);

	return 0;
}

在这里插入图片描述

//&数组名+1
int main(void)
{
	int a[] = { 0,1,2,3,4,5,6,7,8,9 };

	printf("a = %p\n", a);//a = 004FF794
	printf("&a[0] = %p\n", &a[0]);//&a[0] = 004FF794

	printf("a+1 = %p\n", a + 1);//a+1 = 004FF798

	printf("&a = %p\n", &a);//&a = 004FF794
	printf("&a+1 = %p\n", &a+1);//&a + 1 = 004FF7BC 16进制28==10进制40

	return 0;
}

在这里插入图片描述

//指针加减指针
int main(void)
{
	int a[] = { 0,1,2,3,4,5,6,7,8,9 };
	int* p = &a[8];
	int* q = &a[3];

	printf("p - q = %d\n", p - q);//p - q = 5

	return 0;
}

在这里插入图片描述

int main(void)
{
	int a[] = { 0,1,2,3,4,5,6,7,8,9 };
	int* p = a;

	for (size_t i = 0; i < 10; i++)
	{
		printf("%d ", *p);
		p++;
	}

	putchar('\n');
	printf("p - a = %d\n", p - a);//p - a = 10

	return 0;
}

8.指针实现 strlen 函数

在这里插入图片描述

在这里插入图片描述

#include <stdio.h>

int mystrlen(char str[]);

int main(void)
{
	char str[] = "hello";
	int ret = mystrlen(str);
	printf("ret = %d\n", ret);

	return 0;
}

int mystrlen(char str[])
{
	int i = 0;
	while (str[i] != '\0')
	{
		i++;
	}

	return i;
}

在这里插入图片描述

//借助指针++实现
int mystrlen2(char str[])
{
	char* p = str;

	while (*p != '\0')
	{
		p++;
	}

	return p-str;//返回数组元素的个数
}

9.指针比较运算

在这里插入图片描述

在这里插入图片描述

#include <stdio.h>

int main(void)
{
	int a[] = { 0,1,2,3,4,5,6,7,8,9 };
	int* p = &a[3];

	if (p > a)
		printf("成立\n");
	else if(p < a)
		printf("不成立\n");
	else
		printf("==\n");

	return 0;
}

10.指针数组

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

#include <stdio.h>

int main(void)
{
	int a = 10;
	int b = 20;
	int c = 30;

	int* p1 = &a;
	int* p2 = &b;
	int* p3 = &c;

	int *arr[] = { p1,p2,p3 };//整型指针数组arr,存的都是整型地址

	printf("*(arr[0]) = %d\n", *(*(arr + 0)));//arr[0]=*(arr+0)
	printf("*(arr[0]) = %d\n", **arr);//*(arr[0]) = 10

	return 0;
}

在这里插入图片描述

int main(void)
{
	int a[] = { 10 };
	int b[] = { 20 };
	int c[] = { 30 };

	int *arr[] = { a,b,c };

	//arr[0][0]==*(arr[0]+0)=*(*(arr+0)+0)
	printf("arr[0][0] = %d\n", **arr);//arr[0][0] = 10
	printf("arr[0][0] = %d\n", *(*(arr + 0) + 0));//arr[0][0] = 10

	return 0;
}

11.多级指针

在这里插入图片描述

在这里插入图片描述

#include <stdio.h>

int main(void)
{
	int a = 10;
	int* p = &a;
	int** pp = &p;
	//int** pp = &(&a);不允许
	int*** ppp = &pp;

	printf("***ppp = %d\n", ***ppp);//***ppp = 10
	printf("**pp = %d\n", **pp);//**pp = 10
	printf("*p = %d\n", *p);//*p = 10
	printf("a = %d\n", a);//a = 10

	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值