C语言指针和指针变量

一、指针

概念:当定义一个变量时,系统会为这个变量分配内存,比如,int a,系统会给变量a分配一块内存,大小为in型的4个字节,而且每个字节都会有一个编号,这个编号就是地址,这个编号是计算机抽象出来用于访问数据的,实际上为一个数字。当计算机需要访问数据时,会先找到它的地址,再来获取改地址里的数据。比如,int a=1;当计算机需要printf("%d",a)时,它会先找到a的地址(比如0x000001),然后找到a的值为1。而一个变量的地址就称为该变量的指针。指针就是一个地址,它在计算机中是一个内存单元的编号,一个十六进制数。

二、指针变量:c语言有很多种变量,每种变量都会储存一种数据,而指针变量就是专门来储存指针的变量,如定义一个指针变量p,p是一个指向int型数据的指针,即p可以存int型变量的地址。

int *p;

1.这里有两种访问数据的方式:

  1. 直接访问:就像上面所说,计算机先找到该变量的地址,再找到该变量的值
  2. 间接访问:与第一种不同,这里要用到两个变量,用一个变量2来储存变量1的地址,然后通过变量2来找到变量1的值

在函数传参时,在函数体里只改变型参的值,对实参不会造成影响,这里通过地址的传递可以对实参造成影响

*p1和*p2的值虽然都是2和1,但是原理不同。

在swap2函数里,*p1是通过b的地址找到了b的值,而此时a和b的值并没有交换所以*p1是2,*p1也是这样。

在swap1函数里,p1和p2的值(p1和p2的值是a和b的地址)没有改变,但在上面已经交换了a和b的值,所以*p1通过a的地址找到a的值为2。

2.指针的大小:指针的大小和指针本身没有关系,这是由CPU运行模式的寻址位数决定的

#include<stdio.h>
#include<windows.h>
int main()
{
	int a;
	int *p1;
	float *p2;
	double *p3;
	char *p4;
	printf("sizeof(p1):%d\nsizeof(p2):%d\nsizeof(p3):%d\nsizeof(p4):%d\n",sizeof(p1),sizeof(p2),sizeof(p3),sizeof(p4));
	system("pause");
	return 0;
}

输出结果:

可以看出无论是int型指针还是char型指针,大小都是4个字节。

三、二级指针

1.二级指针就是指针的指针,也就是说,一级指针变量用来存放变量的地址,但一级指针变量也是一个变量,它也有自己的地址,所以二级指针就是存放一级指针的地址的指针。

  • 20
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值