黑马程序员————C语言指针

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

1,指针简介

    指针是C语言中非常重要的一种数据类型。学习指针是学习C语言中最重要的一环,能否正确理解和使用指针是我们是否掌握C语言的一个标志。

2,指针定义

    对指针变量的定义包括三个内容:
(1)指针类型说明,即定义变量为一个指针变量;
(2)指针变量名;
(3)变量值(指针)所指向的变量的数据类型。
    其一般形式为:类型说明符 *变量名;其中,*表示这是一个指针变量,变量名即为定义的指针变量名,类型说明符表示本指针变量所指向的变量的数据类型。
例如:

int *p;表示p是一个指向整型变量的指针。
char *q;表示q是一个指向字符变量的指针。

3,指针变量的声明和赋值

    指针变量同普通变量一样,使用之前不仅要定义说明,而且必须赋予具体的值。未经赋值的指针变量不能使用,指针变量的赋值只能赋予地址,决不能赋予任何其它数据。
两个有关的运算符:
(1)&:取地址运算符。
(2)*:指针运算符。

    C语言中提供了地址运算符&来表示变量的地址。例如&a表示变量a的地址,&b表示变量b的地址。指向整型变量的指针变量p,如要把整型变量a的地址赋予p,可以有以下两种方式:
(1)初始化

int a;
int *p=&a;

(2)赋值语句

int a;
int *p;
p=&a;

4,指针与数组

    一个数组是由连续的一块内存单元组成的。数组名就是这块连续内存单元的首地址。。一个数组也是由各个数组元素(下标变量)组成的。每个数组元素按其类型不同占有几个连续的内存单元。一个数组元素的首地址也是指它所占有的几个内存单元的首地址。例如:

int a[10];
int *p;
p=&a[0];或者p=a;

C 语言规定:如果指针变量p已指向数组中的一个元素,则p+1指向同一数组中的下一个元素。
(1)p+i 和a+i 就是a[i]的地址,或者说它们指向a数组的第i 个元素。
(2)*(p+i)或*(a+i)就是p+i 或a+i 所指向的数组元素,即a[i]。
(3)指向数组的指针变量也可以带下标,如p[i]与*(p+i)等价。
引入指针变量后,就可以用两种方法来访问数组元素了。
综上,引用一个数组元素可以用:
(1)下标法,即用a[i]形式访问数组元素。在前面介绍数组时都是采用这种方法。
(2)指针法,即采用*(p+i)形式,用间接访问的方法来访问数组元素,其中a是数组名,p是指向数组的指针变量,其处值p=a。

5,指针与字符串

可以将字符串的首地址赋予指向字符类型的指针。
例如:

char *pc;
pc="C Language";
或用初始化赋值的方法写为:
char *pc="C Language";

以上并不是把整个字符串装入指针变量,而是把存放该字符串的字符数组的首地址装入指针变量。
因此在C语言中,可以用两种方法访问一个字符串。
(1)用字符数组存放一个字符串,然后输出该字符串。
(2)用字符串指针指向一个字符串。

例如:

#include <stdio.h>
int main()
{
char *ps="this is a book";
printf("%s\n",ps);
}

用字符数组和字符指针变量都可实现字符串的存储和运算。但是两者是有区别的。在使用时应注意以下几个问题:

(1)字符串指针变量本身是一个变量,用于存放字符串的首地址。而字符串本身是存放在以该首地址为首的一块连续的内存空间中并以‘\0’作为串的结束。字符数组是由于若干个数组元素组成的,它可用来存放整个字符串。
(2)对字符串指针方式

char *ps="C Language";

可以写为:

char *ps;ps="C Language";

而对数组方式:

static char st[]={"C Language"};

不能写为:

char st[20];
st={"C Language"};

6,指针与函数

1)函数指针变量。
     在C语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址。我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指向该函数。然后通过指针变量就可以找到并调用这个函数。我们把这种指向函数的指针变量称为“函数指针变量”。
    函数指针变量定义的一般形式为:类型说明符 (*指针变量名)();其中“类型说明符”表示被指函数的返回值的类型。“(* 指针变量名)”表示“*”后面的变量是定义的指针变量。
例如:

#include <stdio.h>
int max(int a,int b)
{
	if(a>b)return a;
	else return b;
}
int main()
{
	int max(int a,int b);
	int(*pmax)();
	int x,y,z;
	pmax=max;
	printf("input two numbers:\n");
	scanf("%d%d",&x,&y);
	z=(*pmax)(x,y);
	printf("maxmum=%d",z);
}

2)指针型函数
    所谓函数类型是指函数返回值的类型。在C语言中允许一个函数的返回值是一个指针(即地址),这种返回指针值的函数称为指针型函数。
    定义指针型函数的一般形式为:

类型说明符 *函数名(形参表)
{
…… /*函数体*/
}

其中函数名之前加了“*”号表明这是一个指针型函数,即返回值是一个指针。类型说明符表示了返回的指针值所指向的数据类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值