C语言的指针
2017-11-18 00:07
190 查看
指针(pointer)是存放内存地址的变量。指针变量(pointer variable)专门存放指向相应类型的指针。指针有以下5个主要功能:
(1)可以帮助快速引用数组的元素;
(2)可以允许C函数修改调用变元的内容;
(3)可以支持链表及其他动态数据结构(例如二叉树);
(4)指针支持C动态分配子程序;
(5)指针可以改善某些子程序的效率。
指针是C语言最强的特性之一,同时又是最危险的特性之一。例如,含无效值的指针可以使系统瘫痪。更甚之,不正确地使用指针容易引人难以排除的程序错误。
char *p:这是定义了一个指向char型变量的指针,p存放的是一个char类型变量的地址,*p是取得指针p所指向的地址存储的值,&是取地址运算符,&c是取得变量c的地址。总结于下:
&:取地址运算符。一元操作符,返回其操作数的内存地址。
*:取指针所指向的内存单元的值。一元操作符,返回其操作数所示地址处的值。
对于程序中的每一个变量,编译程序时都要分配一块内存用于存储该变量的值。例如:
char c='A';
int i=100;
编译器分别给变量c, i分配1个字节和4个字节的存储空间。
指针的定义形式:数据类型 *指针变量名;
注意:应绝对避免使用未初始化的指针。定义指针时将它初始化为NULL。
运行结果:
指针的初始化
指针在声明后复制前,其值不确定。赋值前试图使用指针时,不仅可能导致程序瘫痪,也可能使计算机操作系统垮掉,错误可谓严重之至。
C程序员使用指针时的正确习惯是:对于当前没有指向合法的内存位置的指针,为其赋值null(零)。因为C保证空地址不存在对象,这样,任何空指针均意味着它不指向任何对象,不应该使用它。
(1)可以帮助快速引用数组的元素;
(2)可以允许C函数修改调用变元的内容;
(3)可以支持链表及其他动态数据结构(例如二叉树);
(4)指针支持C动态分配子程序;
(5)指针可以改善某些子程序的效率。
指针是C语言最强的特性之一,同时又是最危险的特性之一。例如,含无效值的指针可以使系统瘫痪。更甚之,不正确地使用指针容易引人难以排除的程序错误。
char *p:这是定义了一个指向char型变量的指针,p存放的是一个char类型变量的地址,*p是取得指针p所指向的地址存储的值,&是取地址运算符,&c是取得变量c的地址。总结于下:
&:取地址运算符。一元操作符,返回其操作数的内存地址。
*:取指针所指向的内存单元的值。一元操作符,返回其操作数所示地址处的值。
对于程序中的每一个变量,编译程序时都要分配一块内存用于存储该变量的值。例如:
char c='A';
int i=100;
编译器分别给变量c, i分配1个字节和4个字节的存储空间。
指针的定义形式:数据类型 *指针变量名;
注意:应绝对避免使用未初始化的指针。定义指针时将它初始化为NULL。
#include <stdio.h> main() { int a=10,b=20; int *p1=&a,*p2=&b; //输出值 printf("%d,%d\n",a,b); printf("%d,%d\n",*p1,*p2); //输出内存地址 printf("%x,%x\n",&a,&b); printf("%x,%x\n",p1,p2); }
运行结果:
指针的初始化
指针在声明后复制前,其值不确定。赋值前试图使用指针时,不仅可能导致程序瘫痪,也可能使计算机操作系统垮掉,错误可谓严重之至。
C程序员使用指针时的正确习惯是:对于当前没有指向合法的内存位置的指针,为其赋值null(零)。因为C保证空地址不存在对象,这样,任何空指针均意味着它不指向任何对象,不应该使用它。
//通过指针在字符串数组中搜寻目标字符串 #include <stdio.h> #include <string.h> int search(char *p[],char *name); char *names[]={ "Mary", "Alice", "Kitty", "Jane", "Shara" }; int main() { if(search(names,"Jane")!=-1) printf("Jane is in list.\n"); if(search(names,"Bill")==-1) printf("Bill not found.\n"); } int search(char *p[],char *name) { register int t; for(t=0;p[t];++t) //if(!strcmp(p[t],name)) if(strcmp(p[t],name)==0) return t; return -1; }
相关文章推荐
- C语言实现栈,对栈初始化的指针有关问题
- 关于C语言动态分配内存传指针的理解
- C语言const与指针
- C语言中的指针和内存泄漏
- 嵌入式 Linux C语言(五)——指针与字符串
- C语言结构体里的成员数组和指针
- iOS开发学习笔记 2-4 C语言部分 指针
- C语言--- 高级指针2(结构体指针,数组作为函数参数)
- C语言指针拾遗
- C语言--结构体中的指针
- C语言数组和指针的理解_在取地址运算上的操作_指针加减操作_a 和&a 的区别
- C语言中的数组和指针汇编代码分析实例
- C语言 指针与一维数组,指针遍历一维数组的多种方法
- 关于c语言字符串中sizeof指针的问题
- 【C语言】14-返回指针的函数与指向函数的指针
- C语言 指针 详解 三 C语言数组指针(指向数组的指针)
- C语言指针导学(6)——使用指针时的“陷阱”
- c语言指针详解
- 深入理解C语言指针的奥秘
- c语言指针集合