C语言指针的认识(一)

C语言指针的认识(一)

一.什么是指针:

指针也就是内存地址,指针变量是用来存放内存地址的变量。就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明。指针变量声明的一般形式为:

type var_name;
其中type是数据类型(int char float double),其中" * "与乘法中的
相同但是意义不同,在这里,表示是指针。
示例:

int*p      表示int类型的指针
float*p      表示float类型的指针
double*p      表示double类型的指针
char*p      表示char类型的指针

为什么要用指针:
学习 C 语言的指针既简单又有趣。通过指针,可以简化一些 C 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的。所以,想要成为一名优秀的 C 程序员,学习指针是很有必要的。在有些情况下要借助指针才能更好的解决问题。
例如:实现用函数实现两个数的值交换:交换前 a=5,b=20;交换后a=20,b=5;
如果不用指针:

#include<stdio.h>
void swap(int a,int b)
{
	int t=0;
	t=a;
	a=b;
	b=t;
}
int main()
	{
		int a=5,b=20;
		printf("交换前:a=%d,b=%d\n",a,b);
		swap(a,b);
        printf("交换后:a=%d,b=%d\n",a,b);
		return 0;
	}

结果如下:
在这里插入图片描述
这里可以看出a和b的值并没有改变,因为这里是形参的值发生交换,与实参的值并没有关系,所以不会改变。
接下来我们用指针来实现用地址来交换实现值的交换:

#include<stdio.h>
void swap(int *x,int *y)
{
	int t=0;
	t=*x;
	*x=*y;
	*y=t;
}
int main()
	{
		int a=5,b=20;
		printf("交换前:a=%d,b=%d\n",a,b);
		swap(&a,&b);
        printf("交换后:a=%d,b=%d\n",a,b);
		return 0;
	}

结果如下:
在这里插入图片描述
不难看出用指针可以完成交换值,所以指针在C语言中还是有不可代替的作用的!!
接下来我们来慢慢了解一下:

二.指针的初步认识:

2.1.取地址操作符“&”,这个符号就是取地址操作符,在指针运用中经常要取出地址来进行运算。(用%p可以输出地址)

在这里插入图片描述
2.2:指针变量:
指针是一个地址,而指针变量是存放地址的变量。 习惯上我们也将“指针变量”简称为“指针”,但一定要明白这两个指针的区别。 一个是真正的指针,它的本质是地址;而另一个是指针变量的简称。 为了表示指针变量和它所指向的变量之间的联系,在程序中用“*”表示“指向”。 如果定义变量 i 为指针变量,那么 *i 就表示指针变量i里面存放的地址所指向的存储单元里面的数据。
2.3指针变量的大小:
关于指针变量的大小: 指针变量的大小只跟地址线有关,32位地址线 = 32个01组成的二进制序列
求大小的方法:
printf(“%d\n”,sizeof(int *));
下面我们来验证:

#include<stdio.h>
int main()
	{
	    printf("%d\n",sizeof(int *));
		printf("%d\n",sizeof(char *));
		printf("%d\n",sizeof(double *));
		printf("%d\n",sizeof(short *)); //输出结果相同
		return 0;
	}

结果如下:
在这里插入图片描述
大小 :32位 / 8位 = 4个字节,64位 / 8位 = 8个字节
2.4:指针加减整数
加法运算:可以对指针进行加法运算。 当一个指针p加上一个整数n时,结果是指针p向前移动n个元素的大小。 例如,如果p是一个int类型的指针,每个int占4个字节,那么p + 1将指向p所指向的下一个int元素。
减法运算:可以对指针进行减法运算。 当一个指针p减去一个整数n时,结果是指针p向后移动n个元素的大小。 例如,如果p是一个int类型的指针,每个int占4个字节,那么p - 1将指向p所指向的前一个int元素。
示例:
在这里插入图片描述
因为指针开始时指向的是数组元素的起始位置,所以加一后会跳跃到下一位也就是5
2.5 const修饰指针
2.5.1.
const放在*的左边,修饰的是指针指向的内容,保证指针指向的内容不能通过指针来改变。
示例:(但是指针变量本身的内容可变)

const int *p = &n;        n里面的值不能被改变

*p = 20;        //会报错

2.5.2.
const放在*的右边,修饰的是指针变量本身,保证了指针变量的内容不能修改。
示例:(但是可以通过指针改变指针指向的内容)

int *const p = &n;        指向n的行为不能被改变

p = &m;        //会报错

以上就是关于指针的初步认识,让我们慢慢来学习吧,下面我会继续讲解进一步的内容,有什么问题请私信我哦!!

相关推荐

  1. C++语言学习()—— 认识C++语言

    2024-04-21 04:56:01       33 阅读
  2. 学懂C语言系列():认识C语言

    2024-04-21 04:56:01       25 阅读
  3. C语言指针数组 指针运算

    2024-04-21 04:56:01       71 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-21 04:56:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-21 04:56:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-21 04:56:01       82 阅读
  4. Python语言-面向对象

    2024-04-21 04:56:01       91 阅读

热门阅读

  1. Docker 常用命令教程

    2024-04-21 04:56:01       38 阅读
  2. c 贪吃蛇的实现

    2024-04-21 04:56:01       27 阅读
  3. 通过实例学C#之Random类

    2024-04-21 04:56:01       31 阅读
  4. Bezout定理

    2024-04-21 04:56:01       40 阅读
  5. Proxmox VE (PVE) 教学 (1) | 介绍与安装

    2024-04-21 04:56:01       113 阅读
  6. git本地提交记录 删除后如何找回

    2024-04-21 04:56:01       36 阅读