A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵安庆 中级黑马   /  2016-5-11 12:05  /  1257 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1、指针和数组之间的关系
1)数组指针:
指向数组元素的指针变量
int a[5]; //a[0] a[1] 直接访问
目标:用地址也可以访问数组元素

(1)数组名访问
a存放的是数组的首地址(常量)
*a == a[0]元素的值
a+1 指向数组的下一个元素
a-1 指向数组的上一个元素
*a+1 == a[0]+1;
*(a+1) == a[1]元素的值

int *p; //指针变量
p = a; //p指向了数组a的第一个元素
p = &a[0];

p+1 指向数组的下一个元素
p-1 指向数组的上一个元素

*p == a[0]元素的值
*p+1 == a[0]+1;
*(p+1) == a[1]元素的值

p = p+1; //p移动到了下一个元素
p++;
*p++ == *(p++) == *(p = p+1)

2、指针数组
指针数组:数组的每一个元素都是一个指针
int a[2][3]={1,2,3,4,5,6}; // a[0] 1,2,3 a[1] 4,5,6
int *pa[]={a[0],a[1]};
printf("%d\n",**(pa+1)); //4


3、指针的运算
前提:两个指针必须指向同一个数组 运算:减法
实质:计算两个指针之间关系,判断指针的位置
p = a; p1 =&a[3]
p1 - p > 0 表示p1在高位置
p1 - p < 0 表示p1在低位置
p1 - p = 0 表示p1和p指向了同一个位置

注意:
指针的运算,不能有加法的


4、指针和二维数组
指针和一维数组:
1)数组的指针 指向数组元素
2)指针数组 数组的每一个元素还是一个指针
a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
a[0] <--1 2 3 4 a[1] <--5 6 7 8 a[2] <--9 10 11 12
a[0]+1 == a[0][1] 地址 *(a[0]+1)== a[0][1] 的值
*(a+j) == a[j]的值 一维数组:a的值 用数组地址表示:*(a+i) 用数组名访问数组的每一个元素:*(*(a+i)+j)
指针和二维数组: 1)指针指向二维数组的元素
int (*p)[4]; //指针变量名 p p = a;
2)二维的指针数组
char *str[2][3]={{"abc","acb","ade"},{"abc","ddd","eee"}};


5、指针和字符串
1)字符串指针,用来保存字符串
char *s="agadsf"; // 有\0
2) 用字符串数组的方法
char ch[]="dafasdf";// 有\0
3) char *c = 'a';

4)字符串指针变量和字符数组的的区别

1)区别一,能否重新赋值问题
char ch[20]="xxxxx";
ch = "asdfasdf"; // 不可以的 ch是常量,存储的是数组的首地址
char *ss="xxxxxx"; //"xxxxxx" 0x01
ss = "xxx"; // 可以的,ss是指针变量,

2)区别二,存储的区别
char ch[10]="xxxx"; 存放的是栈区(可读可写) x x x x \0 0 0 0 0 0 0 0
ch[4]='A'
char *str ="pppp";存放的是常量区(只读)


6、字符串数组
存储字符串的几种方式
1)二维的字符数组

char name[10][20]={
    "fengjie",
    "suibian",
    "xxxxxx" };

2)用一维的指针数组存放字符串
char *name[10]={
    "fengjie",
    "suibian",
    "xxxxxx"
}

1 个回复

倒序浏览
666666666666666666666666666
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马