课前挑战--数组与指针、指针变量作函数参数
一、主题讨论
二、课前预习本章节PPT
三 、相关知识提前学
指针变量声明与初始化
指针变量是一种特殊变量类型,用于保存某一具体数据类型变量的地址。
定义格式:数据类型符 * 指针变量名称;
数据类型符*中的*的含义为“指向”,数据类型符则表示该指针变量可指向的变量类型。 例如:
int *p1 ;
char *p2 ;
nt *与char *为变量p1和p2的数据类型,它们都是指针类型,但指向不同,p1指向int型,而p2指向char型。指针变量名是p1和p2而不是*p1和*p2。 可以一次定义多个指针变量,每个指针变量前都要有*运算符。例如:
int *p1, *p2; /*定义指针变量p1、p2*/
指针变量既然是一个变量,就具有变量的特点。在定义指针变量后,系统为其分配一定的存储空间,用于存放指向变量的地址。指针变量保存了变量的指针,又称该指针变量指向了一个变量。可以通过&操作符得到变量的指针,并用赋值语句将其赋给一个指针变量。例如:
int n; /*定义一个int型变量n*/
int *pn=&n; /*定义指针变量pn,用于存放int型变量n的指针,pn指向n*/
指针变量时初始化,令其指向一个对应的变量。 例如:
int a, *p1=&a; /*定义整型变量a及整型指针变量p1,同时让p1指向a*/
char c[]=”Hi”, *p2=c; /* 定义字符数组c及字符型指针变量p2,同时让p2指向c*/
当两个指针具有相同的指向类型时,可以利用赋值语句对指针赋值。例如:
int a, q1,*p1=&a;/* 定义整型变量a及整型指针变量p1,q1,同时让p1指向a*/
q1=p1; /* p1值赋值给q1,使得p1、q1同时指向a*/
一旦指针变量确定了指向对象,可以通过间接引用运算符(*)访问存储在对象中的内容。指针变量的引用实际上是对变量的间接访问方式。例如:
int *p,m=5;
p=&m; /*指针p指向变量m * /
*p=15; /**p是对指针所指变量的引用形式,与m意义相同,相当于将变量m赋值为15 */
声明中的'*'和执行中的'*'的区别:声明语句中的*p(int*p;)表示定义p为指针变量,指向类型为int型;在执行语句的*p( *p=15;)表示将代替p所指向的变量(例如m)参与操作。
如果指针变量未初始化,使用*p的值可能导致程序出错。
可以定义指针变量指向void型,作为一般指针变量的数据类型使用。
定义格式:void* p;
p作为一个指针变量仍然有自己的存储单元。这种指向void类型的指针可以指向其它任何一种类型,无须类型转换。任何类型的指针也都可以执指向void类型。但是void类型无法指定p指向哪种类型的变量。