一、引言
对于很多大学生,C语言指针是最让人头疼的地方,对于当初的我也不例外,通过网上的资料今天我就给大家汇总下C语言指针的概念及方法。
二、指针是什么
指针是C语言中广泛使用的一种数据类型,运用指针编程是C语言最主要的风格之一。正确而灵活地运用它,可以有效地表示复杂的数据结构;能动态分配内存;能方便地使用字符串;有效而方便地使用数组;在调用函数时能得到多于1个的值;并能像汇编语言一样处理内存地址,从而变出精练而高效的程序等,这对设计系统软件是很必要的。掌握指针的应用,可以使程序简洁、紧凑、高效。指针极大地丰富了C语言的功能。每一个学习和使用C语言的人,都应当深入地学习和掌握指针。可以说,不掌握指针就是没有掌握C语言的精华。
指针是变量,变量存放地址,指针即为地址,存放在指针中的值都被当成地址
#include <stdio.h>
int main(void)
{
int a = 10;//内存中开辟空间
int* p = &a;//这里我们对变量a,取其地址,将a的地址存放在p中,p就是一个指针变量
return 0;
}
二、指针和指针类型
指针类型决定了指针进行解引用操作的时候,能够访问空间的大小
#include <stdio.h>
int main(void)
{
int a = 0x11223344;
int* pa = &a; //二者都可以存放地址
*pa = 0;
char* pc = &a; //二者访问的字节不同
*pc = 0;
return 0;
}
int*p; *p可以访问4个字节
char*p; *p可以访问1个字节
double*p; *p可以访问8个字节
指针类型决定了指针走一步走多远(指针的步长)
#include <stdio.h>
int main(void)
{
int a = 0x1122344;
int* pa = &a;
char* pc = &a;
printf("%p\n", pa);
printf("%p\n", pa + 1);
printf("%p\n", pc);
printf("%p\n", pc + 1);
return 0;
}
三、字符数组总结
指针(Pointer)就是内存的地址,C语言允许用一个变量来存放指针,这种变量称为指针变量。指针变量可以存放基本类型数据的地址,也可以存放数组、函数以及其他指针变量的地址。
程序在运行过程中需要的是数据和指令的地址,变量名、函数名、字符串名和数组名在本质上是一样的,它们都是地址的助记符:在编写代码的过程中,我们认为变量名表示的是数据本身,而函数名、字符串名和数组名表示的是代码块或数据块的首地址;程序被编译和链接后,这些名字都会消失,取而代之的是它们对应的地址。
- 指针变量可以进行加减运算,例如p++、p+i、p-=i
。指针变量的加减运算并不是简单的加上或减去一个整数,而是跟指针指向的数据类型有关。
- 给指针变量赋值时,要将一份数据的地址赋给它,不能直接赋给一个整数,例如int *p = 1000;
是没有意义的,使用过程中一般会导致程序崩溃。
-
使用指针变量之前一定要初始化,否则就不能确定指针指向哪里,如果它指向的内存没有使用权限,程序就崩溃了。对于暂时没有指向的指针,建议赋值NULL
-
两个指针变量可以相减。如果两个指针变量指向同一个数组中的某个元素,那么相减的结果就是两个指针之间相差的元素个数。
-
数组也是有类型的,数组名的本意是表示一组类型相同的数据。在定义数组时,或者和 sizeof、& 运算符一起使用时数组名才表示整个数组,表达式中的数组名会被转换为一个指向数组的指针。
四、视频教学
如何更多小伙伴想更快速的了解C语言指针相关的视频,博主推荐可以看下此免费视频教学