C语言学习日记Day05指针

在这里插入图片描述

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

变量存储示意图
在这里插入图片描述

指针间接改变变量的值
在这里插入图片描述
在这里插入图片描述

#define  _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>


int main0101()
{
	int a = 0Xaabbccdd;
	//a = 100;
	printf("%p", &a);
	getchar();
	return 0;
} 
int main0102()
{
	//定义指针变量存储变量地址

	//指针类型 ----------》数据类型*  
	int a = 10;
	int* p = &a;
	//a = 100;


	*p = 100;//通过指针间接改变变量的值
	printf("%d\n", a);
	printf("%d\n", *p);
	printf("%p\n", &a);
	printf("%p\n", p);
	return 0;
}

int main0103()
{
	//定义指针变量存储变量地址

	//指针类型 ----------》数据类型*  
	char a = 'n';
	char* p = &a;
	printf("%d\n", sizeof(p));
	printf("%d\n", sizeof(char*));

	int b = 10;
	int* p1 = &b;
	printf("%d\n", sizeof(p1));



	//& 是 取地址符号,升维度
	//*是   取值符号,降维度
	//指针在内存中占字节大小
	printf("%d\n", sizeof(int*));
	printf("%d\n", sizeof(char*));
	printf("%d\n", sizeof(double*));
	printf("%d\n", sizeof(float*));
	printf("%d\n", sizeof(long*));
	printf("%d\n", sizeof(long long*));
	
	return 0;
}

int main0104()
{

	char a = 'a';
	int* p = &a;  //定义指针类型 一定要和变量类型对应上
	//*p = 123456;

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

	printf("%p\n", &a);
	printf("%p\n", p);
	return 0;
}

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

#define  _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>

int main0105()
{
	//不建议将一个变量的值赋值给一个野指针
	//野指针   是指针变量指向一个未知的空间
	int* p = 100;//程序中允许存在野指针
	
	printf("%d\n", *p);//操作野指针对应的内存空间可能会报错       操作系统将0-255作为系统占用,不允许读写操作
	
	return 0;
}
int main0101()
{
	
	//空指针   内存地址编号为0的空间
	int* p = NULL;

	printf("%d\n", *p);//操作空指针对应的内存空间一定会报错
	//空指针可以用作条件判断
	/*if (p == NULL)
	{


	}*/

	return 0;
}

在这里插入图片描述

#define  _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>

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


	//万能指针可以接收任意类型变量的内存地址
	void* p = &a;
	//在通过万能指针修改变量的值时,需要找到变量对应的指针类型
	*(int*)p = &a;
	printf("%d\n", *(int*)p);
	printf("%d\n", a);


	//*p = 100;
	printf("万能指针在内存中占用字节大小:%d\n", sizeof(void*));
	//printf("void万能指针在内存中占用字节大小:%d\n", sizeof(void));//error

	//printf("%d\n", *p);
	return 0;
}

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

#define  _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>

int main0401()
{
	//常量
	const int a = 10;
	//a = 100;    //error

	//指针间接修改常量的值
	int* p = &a;
	*p = 100;
	printf("%d\n", a);
	return 0;
}
int main0402()
{
	int a = 10;
	int b = 20;
	const int* p = &a;

	p = &b;//ok
	//*p = 100;//error
	printf("%d\n", *p);
	return 0;
}

int main0403()
{
	int a = 10;
	int b = 20;
	//const修饰指针变量时,可以修改指针指向内存空间的值,不可以修改指针变量的值
	 int* const p = &a;
	
	//p = &b;//error
	*p = 100;//ok
	printf("%d\n", *p);//ok
	return 0;
}
//const 离谁近  就不能个改变谁
//const 离谁近  就不能个改变谁
//const 离谁近  就不能个改变谁
//const 离谁近  就不能个改变谁
//const 离谁近  就不能个改变谁
//const 离谁近  就不能个改变谁



int main()
{
	int a = 10;
	int b = 20;
	//const修饰指针类型, 且修饰指针变量时 即为只读指针  (不可以直接修改指针指向内存空间的值,也不可以直接修改指针变量的值)但二级指针可以修改
	const int* const p = &a;
	//p = &b;//error
	//*p = 100;//error

	//二级指针操作
	int** pp = &p;//二级指针   *pp是一级指针的内容   **pp是变量的值 
	//*pp = &b;//ok
	printf("%d\n", *p);//20
	**pp = 100;//ok
	printf("%d\n", *p);//100
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值