浅谈C语言中的指针
来源:互联网 发布:电气绘图模拟软件 编辑:程序博客网 时间:2024/06/06 08:46
下面谈谈几个指针中常见的问题:
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指向的是存放系统数据的单元,则可能会造成程序崩溃。
- 浅谈C语言中的指针
- 浅谈C语言中的多级指针
- 【C语言】 浅谈指针
- 浅谈C语言指针
- C语言之指针浅谈
- 浅谈c语言的指针
- 浅谈C语言的指针
- C语言中的指针
- c语言中的指针
- C语言中的指针
- C语言中的指针
- c语言中的指针
- c语言中的指针
- C语言中的指针
- C语言中的指针
- C语言中的指针
- C语言中的指针
- C 语言中的指针
- Git用户名邮箱的全局配置和单仓库配置
- PHP有序表查找----二分查找(折半)
- Js中的window.parent ,window.top,window.self 详解 【整理】
- 【codeforces】660F. Bear and Bowling 4【分治+维护凸壳】
- 图的存储结构
- 浅谈C语言中的指针
- POKEMON SHUFFLE socre
- C++ 防止头文件重复引用
- AngularJS之ng-disabled指令
- 谈技术聊人生
- Linux IO模式及 select、poll、epoll详解
- C++ Cin输入数字时 输入字母 Cin状态出错
- (十八)ArcGIS API For Javascript之加载shp文件
- 聊聊"三遍读书法"