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; //会报错
以上就是关于指针的初步认识,让我们慢慢来学习吧,下面我会继续讲解进一步的内容,有什么问题请私信我哦!!