c语言之一维指针的理解和应用

由于上一篇指针博客写得有点水,所以这篇就把我对指针的理解写下来供大家参考指正

1.什么是指针

我们通常说的指针其实应该叫做指针变量,是一种用来 获取 和 储存 其他变量的地址的变量。其他变量可以是 :整形,字符型 ,指针型 类型,结构体类型。 简而言之,指针给我们提供一种访问地址的方式。也就是可以视为 :指针 就等价于 地址。

2.指针有什么作用

对于一个新的名词来说明白这个新东西的作用是十分重要的,我们可以用它简化很多操作。那么指针有什么用呢?
1.因为通过指针访问变量地址很容易,而变量的地址和计算机的内存空间是密切相关的,所以我们可以通过指针来管理程序内存的申请和释放。这个在使用链表的相关操作时会用到很多。
2.对于同一个变量可以通过不同的指针去访问同一个变量。
3.对于更改操作数的值可以通过变量名和指针去修改。
4.链接的功能(数据结构中的灵魂之一另一个灵魂是结构体)
在这里插入图片描述

3.指针变量的定于

因为在上面我们已经说了,指针的类型也有以上的这几种,所以同类型的指针只能和同类型的变量相对应。
例如: char a,*p;
int b;
只能够:p=&a;
不能:p=&b;
因为他们的类型是不匹配的,会报错提示指针的类型和变量类型不匹配。所以把指针类型和变量类型弄成一致是重中之重,不可忽略。

指针的简单应用

1.改值:
#include <stdio.h>
int main()
{
	printf("随便输入一个不是100的数");
	int a,*p; 
	p=&a;			//a 的地址给p 
	scanf("%d",&a);   //这是没学指针时候的写法,学了指针后就可以写成scanf("%d",p);这样写的前提是必须先让p拿到a的地址 
	printf("值:\n");
	printf("a=%d\n",a);
	printf("*p=%d\n",*p);
	printf("地址:\n");
	printf("&a=%p\n",&a);
	printf("p=%p\n",p);
	//改值
	*p=100;
	printf("更改后:\n") ;
	printf("a=%d\n",a);
	printf("*p=%d\n",*p);
	printf("地址:\n");
	printf("&a=%p\n",&a);
	printf("p=%p\n",p);
	return 0;
} 

读者可以试一下:
实例运行结果:
在这里插入图片描述3.多个指针指向同一个变量

#include <stdio.h>
int main()
{
	int a=6;
	int *q,*p,*m;
	q=&a;
	p=&a;
	m=&a;
	printf("*p=%d\n",*p); 
	printf("*q=%d\n",*q);
	printf("*m=%d\n",*m);
	printf("p=%p\n",p); 
	printf("q=%p\n",q);
	printf("m=%p\n",m);
	return 0;
} 

在这里插入图片描述可以发现这些指针的地址都是一样的,所以要对a进行操作的话,随便一个指针都可以。

使用指针时的注意事项

1.指针之间要互异 也就是不能定义两个相同的指针变量。(名称相同)
2.当需要用到多个指针时,可以考虑采用数组指针
3.对于指针的移动时是按照变量的字节数移动。
比如:
int a[]={1,2,3,5,8};
int *p;
p=&a;
++p;
其中++p的移动也就是一次移动一个int的字节大小(4字节)
也就是如果 p=000000000062FE04;(16进制)
那么++p之后的地址是 p=000000000062FE08

如果是:
char s[]=“1234567”;
char *q;
q=s; //这里不用&s的原因是,字符串中的字符串的名字就代表这个字符串的首地址 s等价于s[0]等价于q;
这里如果用 q++;//++p 和 p++ 在单独使用的时候没有区别
那么就是每加一次就移动一个char型的大小(1个字节);
也就是如果 q=000000000062FE04;(16进制)
那么++p之后的地址是 p=000000000062FE05

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值