C语言-指针学习

本文介绍了指针的基础知识,包括指针作为内存地址、取地址符、指针变量与常量的区别,以及如何初始化和使用指针。讲解了*运算符的间接访问功能,空指针NULL的使用,以及指针改变指向的方法。此外,还探讨了二级指针的概念和作用,展示了如何通过二级指针改变一级指针的指向。最后,提到了指针与地址的关系,并讨论了指针安全性和指针与整型变量的转换。
摘要由CSDN通过智能技术生成

指针基础(一)

指针其实就是内存地址。
普通变量定义形式:

	int a=10,b=20,c=30;
	printf("a=%d,b=%d,c=%d\r\n",a,b,c);

变量存储在内存里面 ,&取地址符找到存放在内存中的哪个位置

	printf("a地址=%d,b地址=%d,c地址=%d\r\n",&a,&b,&c);

#p打印就是16进制打印 #可以打印出来0x

	printf("a地址=%#p,b地址=%#p,c地址=%#p\r\n",&a,&b,&c);

指针常量:&a,&b,&c ;
指针变量: 存储的是地址
p类型就是char*, 指向char型的指针

	char* p; 

靠近char和靠近变量名字没有区别。

	char *p1;
	char *p2;  

指针一定要进行初始化,没有初始化的指针无法使用

	int *pa = &a;
	printf("pa=%d",pa); 

空指针(NULL)

int *pd = NULL; 

#define和typedef的区别

N的类型是 int 类型,预处理全部替换
M的类型是 int 起别名 预处理不会全部替换 这种类型就代表int

	#define MYINT int 
	typedef int MYPLUSINT; 
	MYINT N;	
	MYPLUSINT M;

无法和定义一串整型一样定义一串指针变量。
只有p1是指针变量。

	#define PMYINT *int 
	PMYINT p1,p2,p3,p4; 
	//正确用法 
	int* p1,*p2,*p3,*p4;

这里定义了4个指针变量。

	typedef int* PMYPLUSINT; 
	PMYPLUSINT p1,p2,p3,p4;

指针和地址的关系如下图所示:
在这里插入图片描述

指针基础(二)

指针的间接访问运算符:* :间接访问运算符(解引用运算符)。
打印出a的地址:

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

打印出a的值:

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

空指针打印出空指针的地址:

	int *pd = NULL; 
	printf("*pa=%d\r\n",pd); 

指针也可以改变指向。

	int *pa = &a;
	printf("pa=%d\n",*pa);
	pa = &c; 
	printf("pa=%d\n",*pa);

二级指针

二级指针指向一级指针的指针
指针有地址

  int* pa,*pb,*pc;
 	pa = &a;
 	pb = &b;
 	pc = &c;
	printf("pa的地址%d,pb的地址%d,pc的地址%d",&pa,&pb,&pc); 
int** ppa = &pa,** ppb = &pb,** pc = &pc;

二级指针示意图:
二级指针存储的是一级指针的地址。
在这里插入图片描述二级指针也可以改变指向。两个指针指向同一个值。

ppb = &pc;

进行间接访问

*ppa = &a;

使用二级指针修改数值。

** ppc = 600;
//关系: **ppc = *(*ppc) = *pc = c; 

三级指针

三级指针

   int ***pppa = &ppa;

非法指针

无法间接访问。

   int *px;
   printf("*pa=%d\r\n",*px);

因此使用指针不安全,要判断是不是为NULL,不是NULL的时候才可以访问。
正确使用方法。

if(pe!=NULL)
	printf("pe = %d\n",*pe);

指针和int型变量有什么关系?

	 int *pf = (int*)123456;
	 printf("pf = %d",pf);

指针所占内存的大小
不管什么类型的指针都占用4个字节。

	 int *pf;
	 char *pch;
	 double *pdouble;
	 printf("pf的大小:%d\n",sizeof(pf));
	 printf("pf的大小:%d\n",sizeof(pch));
	 printf("pf的大小:%d\n",sizeof(pdouble));
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值