多级指针
  C

多级指针

 次点击
8 分钟阅读

多级指针的基本用法

多级指针

  • 把一个指向指针变量的指针变量,称作多级指针变量

  • 对于指向处理数据的指针变量称为一级指针变量

  • 指向一级指针变量的指针变量称为二级指针变量

二级指针变量的说明形式如下<数据类型> * *<指针名>;

9b388453495ee9dc5f20a54889a5aa2b-qZuE.jpeg

#include <stdio.h>
int main() {

	int a = 10;
	int * p = &a;
	int * * q = &p;
	
	printf("%d %p %p\n",a,p,q);
	printf("%p %p %p\n",&a,&p,&q);
	printf("%ld %ld %ld\n",sizeof(a),sizeof(p),sizeof(q));
	printf("%d %d %d\n",a,*p,**q);

	
    return 0;
}

/*
10 000000000062FE1C 000000000062FE10
000000000062FE1C 000000000062FE10 000000000062FE08
4 8 8
10 10 10
*/

多级指针的运算

指针变量加一,是向地址大的方向移动一个目标数据
多级指针运算也是以其目标变量为单位进行偏移

int*p; p+1移动一个int 变量所占的内存空间
int**p; p+1移动一个int * 变量所占的内存空间
int***p; p+1移动一个int ** 变量所占的内存空间

#include <stdio.h>
int main() {

	int a = 10;
	int * p = &a;
	int * * q = &p;
	
	printf("int*: %p %p\n",p,p+1);
	printf("int**: %p %p\n",q,q+1); 
	
    return 0;
}

/*
int*: 000000000062FE14 000000000062FE18  //移动4个字节
int**: 000000000062FE08 000000000062FE10  //移动8个字节 (16进制 08+8=10)
*/
#include <stdio.h>
int main() {
	int a[] = {4,6,9,10,20};
	int *p[5];
	int n = sizeof(a) / sizeof(int);
	int i;
	int **q;
	
	for (i = 0;i < n;i++){
		p[i] = &a[i];
	}
	for (i = 0;i < n;i++){
		printf("%d %d\n",a[i],*p[i]);
	}
	
	q = p; //&p[0]
	printf("四种方式取a[1]:%d %d %d %d\n",a[1],*p[1],**(q +1),*q[1]);
	
    return 0;
}

/*
4 4
6 6
9 9
10 10
20 20
四种方式取a[1]:6 6 6 6
*/

多级指针和指针数组

指针数组也可以用另外一个指针来处理

#include <stdio.h>
int main() {
	
	char *s[5] = {"apple","pear","peach","orange","banana"};
	char **p = s;//&s[0]
	
	printf("%s\n",s[1]);
	printf("%s\n",*(p + 1));

	p++;
	printf("%s\n",*p);

    return 0;
}

/*
pear
pear
*/

© 本文著作权归作者所有,未经许可不得转载使用。