加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

清楚的认识指针(C语言)

发布时间:2022-10-15 15:30:23 所属栏目:PHP教程 来源:互联网
导读: 一、指针: 1、指针是什么?
指针就是地址,地址也叫指针
2、指针变量是什么?
用来存放地址(指针)的变量我们称为指针变量
3、指针大小
指针(地址):在32位下占4个字节php指针,在64位下占

一、指针: 1、指针是什么?

指针就是地址,地址也叫指针

2、指针变量是什么?

用来存放地址(指针)的变量我们称为指针变量

3、指针大小

指针(地址):在32位下占4个字节php指针,在64位下占8个字节

指针变量:在32位下占4个字节,在64位下占8个字节

上代码

#include 
int main()
{
	char b='v';
	int c=20;
	char* p=&b; //字符型指针变量里面存放的是字符变量的地址 
	int* a=&c;//整型指针 里面存放的是整型变量的地址 
	
	//指针变量的大小 
	printf("char* p:%d\n",sizeof(p)); 
	printf("int* a:%d\n",sizeof(a)); 
	
	//指针(地址)的大小 
	printf("char类型 &b:%d\n",sizeof(&b));
	printf("int类型 &c:%d\n",sizeof(&c));
	
	return 0;
}

二、数组指针

1、数组指针:是指针,指向数组的指针,可以用指针访问数组的每一个元素

2、指针与数组的访问方式相通:

1>可用指针加下标的方式访问

2>可用指针加步长再进行解引用的方式访问

3、指针与数组没有任何关系

上代码

#include 
#include 
int main()
{
	//数组指针
	char a[]="shu zu zhi zheng";
	char(* p)[]=&a;//里面存放的是整个数组的地址 
	//p与 *先结合,所以是指针,指向数组的指针 
	
	printf("%s\n",*p); 
	//将数组指针解引用操作得到的是整个数组 
	//以指针的方式打印出整个数组元素; 
	
	 
	int arr[5]={1,2,3,4,5};
	int* q=arr; //让指针指向数组的首元素
	int i=0;
	int s=sizeof(arr)/sizeof(arr[0]);//计算数组的元素个数 
	for(i=0;i

三、函数指针

1、函数指针:指向函数的指针,指针变量里面存放的是函数的地址

上代码

#include 
#include 
void fin()
{
	printf("fin函数调用成功!\n");
}
int Max(int a,int b)
{
	printf("Max函数调用成功\n");
	int max=a;
	if(b>max)
	{
		max=b;
	}
	return max;
}
int main()
{
	//函数指针,函数的返回值 跟形参类型都不可省略 
	void (*p)()=fin; //定义了一个函数指针
	(*p)(); //以指针的方式调用函数(方法一) 
	p();//以指针的方式调用函数(方法二) 
	
	int (*q)(int,int)=Max;//函数名代表的是整个函数的地址 
	
	//方法一 
	int max=(*q)(10,30);
	printf("其最大值为:%d\n",max);
	
	//方法二 
	int s=q(10,30);
	printf("其最大值为:%d\n",s); 
	
	return 0;
 } 

四、结构体指针

1、结构体指针:就是指向结构体变量的指针

2、可通过指针的方式访问结构体成员变量(指针->成员变量)

上代码

#include 
struct ag{
	int a;
	char b;
	float c;
};
int main()
{
	//定义结构体变量并初始化 
	struct ag s1={10,'b',3.14};
	
	//定义结构体指针并让其指向结构体变量s1; 
	struct ag* p=&s1; 
	
	//通过指针的方式访问结构体成员变量
	printf("%d %c %.2f\n",p->a,p->b,p->c);
	p->a=20; //通过指针的方式改变成员变量的值 
	printf("%d %c %.2f\n",p->a,p->b,p->c);
	
	struct ag s2;
	struct ag* q=&s2;
	scanf("%d %c %f",&q->a,&q->b,&q->c);//给结构体成员变量写入值 
	printf("%d %c %.2f\n",q->a,q->b,q->c); 
	
	return 0;
 } 

五、二级指针

1.二级指针:指向一级指针

2、二级指针变量:存放一级指针的地址

上代码

#include 
#include 
int main()
{
	int a=10;
	int b=48; 
	printf("b的内容:%d\n",b);
	int* p=&a;
	printf("%d\n",*p);
	*p=20;//通过指针的方式改变a的内容 
	printf("%d\n",*p);
	
	int** q=&p;//二级指针里面存放的是指针p的地址;
	printf("%d\n",**q); //二级指针解引用两次就能得到a的内容
	**q=30;//通过指针的方式改变a的内容 
	printf("%d\n",**q); 
	
	*q=&b;//改变一级指针的内容使其指向b 
	printf("b的内容:%d\n",b);
	
	return 0;
}

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!