C语言的指针

    指针(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。


#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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值