浅谈C语言中的指针

简介:

大家都知道指针是C语言中的精粹,学好了指针基本就等于学号了C语言,它能直接对物理地址进行访问,具有双重功能,是嵌入式设计中必不可少的一门语言。C语言功能强大的主要原因就是具有指针结构。指针是一种特殊的数据类型,直接指向目标的存储地址,实现直接访问对象存储空间的功能。

 

下面谈谈几个指针中常见的问题:

1.声明指针和取指针变量所指向内存空间的数据时所用到的 * 符号的意义

如:

int a;

int *p=&a;  

*p=3;

在int *p=&a中 * 仅仅为了说明p是一个指向整形数据的变量,而在*p=3中 * 表示取p所指向内存单元的数据,即*p与a等价;

初学者容易犯下面这个错误:

比如写一个交换函数:

void swap(int *a,int *b)
{
     int *temp=*a;
     *a=*b;
     *b=*temp;
}

犯这种错误的原因是由于对 *的理解不深,a是一个指针变量,*a则表示取a所指单元的数据,是一个int型变量,而int *temp中表示声明了一个指针变量temp,两者数据类型不匹配,因此在编译时会报错。

2.理解指针变量的含义

很多情况下都是由于对指针变量的含义理解不透彻造成错误。一个指针变量的含义表示它是指向一个内存单元,其本身的值是内存单元的地址,并不是所指内存单元中所存的数据。

很多初学者也很容易犯下面这种错误,比如同样是swap函数:

复制代码
void swap(int *a,int *b)
{
     int *temp;
     temp=a;
     a=b;
     b=temp;
}
复制代码

犯这种错误正是由于没有理解指针变量的含义,错误地认为指针变量是所指单元的数据。上述代码中仅仅只是交换了a,b,temp这三个指针变量,但是它们所指单元里的数据并没有进行交换,因此无法达到交换数据的目的。

3.使用指针时会忽略的问题

   在深刻理解指针的含义之后,在使用指针的时候要特别注意,指针在没有被赋值的时候,即没有让指针指向特定的内存单元时,不能用指针进行操作。

比如下面的代码:

char s1[10]="12345";
char *p;
strcpy(p,s1);
printf("%s",p);

这样的代码虽然在编译时不会报错,但是在运行时是绝对不会通过的,因为犯了一个很严重的问题在 strcpy(p,s1) 中使用了指针p,但是在使用之前却没有对p赋值(即让p指向特定的存储单元),因此p的值是不确定的,无法将s1内容复制到*p中,如果p指向的是存放系统数据的单元,则可能会造成程序崩溃。


本文转载自海 子博客园博客,原文链接:http://www.cnblogs.com/dolphin0520/archive/2011/04/03/2004770.html如需转载自行联系原作者

相关文章
|
9天前
|
存储 C语言
C语言 — 指针进阶篇(下)
C语言 — 指针进阶篇(下)
15 0
|
9天前
|
存储 C语言 C++
C语言 — 指针进阶篇(上)
C语言 — 指针进阶篇(上)
6 0
|
15天前
|
存储 程序员 C语言
C语言指针的概念、语法和实现
在C语言中,指针是其最重要的概念之一。 本文将介绍C语言指针的概念、语法和实现,以及如何使用它们来编写高效的代码。
13 0
|
15天前
|
存储 C语言
【C语言】深入解开指针(三)2
【C语言】深入解开指针(三)
|
15天前
|
存储 程序员 C语言
【C语言】深入解开指针(二)2
【C语言】深入解开指针(二)
【C语言】深入解开指针(二)2
|
16天前
|
存储 C语言
【C语言】深入解开指针(一)1
【C语言】深入解开指针(一)
|
17天前
|
C语言 索引
基于C语言的函数指针应用-消息命令处理框架
基于C语言的函数指针应用-消息命令处理框架
11 0
|
24天前
|
存储 人工智能 编译器
C语言指针详解
指针运算,指针和数组,二级指针
C语言指针详解
|
24天前
|
存储 C语言
C语言第二十四弹---指针(八)
C语言第二十四弹---指针(八)
|
24天前
|
编译器 C语言
C语言第十九弹---指针(三)
C语言第十九弹---指针(三)