1、一维数组指针
指向一维数组的指针
int a[5] = {1,2,3,4,5};
int *p = a;
2、二维数组指针
指向二维数组的指针
int arr[1][3] = {1,2,3};
int (*p)[3] = arr;
注意:
数组名a不代表整个数组,只代表数组首元素的地址。
3.指针数组:数组的每一个元素都是一个指针
或者存放指针的数组,就是指针数组
int a=3,b=4,c=5;
int *pa[3]={&a,&b,&c};
int a[2][3]={{1,2,3},{4,5,6}};
int *pa[2]={a[0],a[1]};
4.指针变量之间的运算
前提:两个指针必须指向同一个数组
运算:减法
实质:计算两个指针之间关系,判断指针的位置
p = a; p1 =&a[3]
p1 - p > 0 表示p1在高位置
p1 - p < 0 表示p1在低位置
p1 - p = 0 表示p1和p指向了同一个位置
注意:
指针的运算,不能有加,乘,除运算
5.数组名访问二维数组
int a[3][4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};
访问 第一行的第一个元素地址表示:
a + 1 = &a[1] = a[1] = &a[1][0] = *(a + 1)
获取第一行的第一个元素值的方式:
*a[1] = a[1][0] = **(a + 1)
6.指针和字符串
a、字符串指针,用来保存字符串
char *s = "agadsf"; // 有\0
b、用字符数组的方法保存字符串
char ch[]="dafasdf";// 有\0
c、字符串指针变量和字符数组的的区别
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";存放的是常量区(只读)
|
|