黑马程序员技术交流社区

标题: 数组指针,字符指针笔记 [打印本页]

作者: 后街男孩    时间: 2015-7-20 12:47
标题: 数组指针,字符指针笔记
数组指针(一维的)
定义一个指针变量 让该指针指向数组元素的指针变量 叫做数组指针
指针变量都是占八个字节
数组元素指针
一个变量有地址,一个数组包含若干元素,每个数组元素都有相应的地址,指针变量可以指向数组元素(把某一元素的地址放到一个指针变量中)
所谓数组元素的指针就是数组元素的地址

数组指针的初始化

   Int a[4]={1,2,3,4};
   Int *p=a; 或者 int *p=&a;

数组指针如何访问数组的元素
1)p+1 表示指向数组的下一个元素
2)P-1表示指向数组的下一个元素

使用数组指针和使用数组名的区别
1)指针变量既然是一个变量,它存放的值是可以改变的 *p++正确
2)数组名是数组首地址它是一个常量,是不能改变的  *a++ 错误


一维指针数组
一个数组元素的值为指针就是指针数组,指针数组是一组有序的指针的集合。指针数组的所有元素都必须是具有相同存储类型和指向相同数据类型的指针变量。

指针数组说明的一般形式为:类型说明符 *数组名跑[数组长度]  
int *a[5];---->表示a是一个指针数组,数组长度为5,每个元素的值都指向一个整型变量

两个指针变量的减法运算用法
1)两个指针都指向同一个数组
   I.判断两个指针变量指向的元素是否连续
   II.判断两个指针变量之间相隔几个元素
注意:
1)两个指针变量之间没有加法运算
2)如果两个指针变量指向同一个元素,那么他们相减的结果是 0
3)判断两个指针变量指向的元素是否相邻(连续),他们相减的结果是 1 的绝对值

两个指针的关系运算
P>p1  ----1>表示p在高位
      -----0>表示p和p1指向同一地址



用数组名访问二维数组
Int a[2][2]={1,1,2,2};
A表示二维数组的首地址  a[i] 表示第i行的首地址
*(a[i]+j) 获取a[i][j]  
A[i]     *(a+i)
*(*(a+i)+j)    a[i][j]获取二维数组的每个元素

二维数组指针:行指针,用来指向二维数组的每一行,存放的是行的首地址。

一般形式:数据类型 (*指针变量名)[二维数组列数];
数据类型表示所指数组的数据类型 ‘*’表示其后的变量是指针类型

  Int a[3][4];
  Int (*p)[4];  该语句是定义一个数组指针,指向含有4个元素的一维数组
  P=a;  表示将该二维数组的首地址赋给p  也就是&a[0][0]
  P++  该语句执行过后,也就是p=p+1  也就是跨过行指向 行a[i][]

二维指针数组和二维数组指针的区别
Int *pa[3]={&a,&b,&c};//pa 是一个指针数组

Int(*pa)[3];//二维数组指针
二维数组指针变量是单个变量,其一般形式中(*指针变量名)两边的括号不可少。二维指针数组类型表示的是多个指针。在一般形式中*指针数组名 两边的不能有括号,
例:int (*p)[3]  //二维数组指针
表示一个指向二维数组的指针变量。该二维数组的列数为3或分解为一维数组的长度为3.
Int *p[3];   //二维指针数组
表示p是一个指针数组,有三个下标变量p[0],p[1],p[2]均为指针变量。

字符串指针指向字符串
定义  :Char *变量名=“字符串内容”;  //”字符串内容“存储在常量区

Char *str=”abc” 表示str是一个字符串指针变量。把字符的首地址赋值给str

字符指针
定义:Char ch;   Char *str=&ch  或者  char *str=’abc’ 则str是字符指针

使用字符数组保存一个字符串的时候,保存在堆栈中,是可以读写的。
使用字符串指针保存一个字符串的时候 ,因为字符串常量是在常量区,所以保存的是一个字符串首地址常量因此只能读。
注意:不能直接从键盘接受输入。
      例:char *str;                                      char*str;                           
          Scanf(“%s”,str);错误                            char ch[100];
      因为str没有赋初值,是一个野指针(未分配空间)    Str=ch;      
                                                       Scanf(“%s”,str);  正确
字符串的二维数组
Char ch[2][4]={{“abc”},{“defg”}};

Char类型的指针数组
Char *ch[3]={“abc”,”sdf”,”dfdfd”}; 指针数组的三个元素分别是三个字符串的地址常量,只能读取字符串。

字符串指针与字符数组的区别
字符串指针:char *str =”abc”;  Char *ch[3]={“abc”,”sdf”,”dfdfd”};
字符数组:   char str[]={“abc”};  

字符串指针,
1)指向可以改变
2)Str 是一个指针变量,用于存放字符串的首地址,
3)可以写成 str=“abc”;
字符数组
1)str是一个常量,不能被复制
2)每个元素存放一个字符
3)赋值方式   即赋值不能写成  char str[]; str={“abc”};因为str是一个常量。
4)字符数组可以在定义时整体赋初值,但不能在赋值语句中整体赋值。
即 char str[]={“abc”};   正确   
   
   char str{4};
   str[]=”abc”;错误




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2