指针学习笔记

定义

定义指针变量。

一般形式: 类型 * 指针变量名

                        int *p;

        基类型 指指针变量所指向的变量类型

特殊:定义行指针

格式:在定义后边用方括号指明基类型长度,*p用小括号括住

例如: 

int (*p) [4]  表明该指针的基类型为4个整型变量

定义指针数组。

一般形式:类型名 * 数组名[ 数组长度]

        int *p[5];

引用

一般

一维数组

引用一个数组元素,可用下面两种方法:

(1) 下标法,如a[i]形式    

(2) 指针法,如*(a+i)或*(p+i)   其中a是数组名,p是指向数组元素的指针变量,其初值p=a

多维数组(行指针与列指针)

行指针:

a         p

a+i        p+i

列指针:

a[i]         *(a+i)               *(p+i)

a[i]+j        *(a+i)+j        *(p+i)+j

字符串

字符串是存放在字符数组中的。引用一个字符串,可以用以下两种方法。

(1) 用字符数组存放一个字符串,可以通过数组名和格式声明“%s”输出该字符串,也可以通过数组名和下标引用字符串中一个字符。

(2) 用字符指针变量指向一个字符串常量,通过字符指针变量引用字符串常量。

用字符数组和字符指针变量都能实现字符串的存储和运算,但它们二者之间是有区别的,不应混为一谈,主要有以下几点。

(1) 字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址(字符串第1个字符的地址),决不是将字符串放到字符指针变量中。

(2) 赋值方式。可以对字符指针变量赋值,但不能对数组名赋值。

char *a; a=”I love China!”;   对

char str[14];str[0]=’I’;   对

char str[14]; str=”I love China!”; 错

(3)初始化的含义

char *a=”I love China!”;与 char *a; a=”I love China!”;等价

char str[14]= ”I love China!”;与 char str[14]; str[]=”I love China!”;    不等价

(4) 存储单元的内容   编译时为字符数组分配若干存储单元,以存放各元素的值,而对字符指针变量,只分配一个存储单元

 char *a; scnaf(“%s”,a);   错

 char *a,str[10];  a=str;  scanf (“%s”,a);      对

(5) 指针变量的值是可以改变的,而数组名代表一个固定的值(数组首元素的地址),不能改变。

(6) 字符数组中各元素的值是可以改变的,但字符指针变量指向的字符串常量中的内容是不可以被取代的。

(7) 引用数组元数  

对字符数组可以用下标法和地址法引用数组元素(a[5],*(a+5))。

如果字符指针变量p=a,则也可以用指针变量带下标的形式和地址法引用(p[5],*(p+5))。

(8) 用指针变量指向一个格式字符串,可以用它代替printf函数中的格式字符串。

char *format;

format=”a=%d,b=%f\n”;

printf(format,a,b);

相当于 printf(“a=%d,b=%f\n”,a,b);

指针数组

一个数组,若其元素均为指针类型数据,称为指针数组,也就是说,指针数组中的每一个元素都存放一个地址,相当于一个指针变量。

定义一维指针数组的一般形式为    

 类型名*数组名[数组长度];      

int *p[4];

指针数组比较适合用来指向若干个字符串,使字符串处理更加方便灵活

可以分别定义一些字符串,然后用指针数组中的元素分别指向各字符串

由于各字符串长度一般是不相等的,所以比用二维数组节省内存单元

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值