关于二级指针与一级指针相互转换的问题!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于二级指针与一级指针相互转换的问题!相关的知识,希望对你有一定的参考价值。

哪位高手给举个简单的例子,二级指针可以当做指针数组么?

/* 可以啊…… */
#include <stdio.h>
void print(int (*a)[5])
int i,j;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
printf("%d\t",a[i][j]);

printf("\n");


int main(int argc, char *argv[])

int arr[5][5];
printf("初始化之前,arr数组的值如下:\n");
print(arr);
printf("将二级指针换为一级指针,这样代码更加简洁\n");
int i;
//注意看,下面这个for循环里面就是具体做法
for(i=0;i<25;i++)
( (int *) arr)[i]=0;

print(arr);
//如果不按上面这样做,就需要多加一个整型变量来完成初始化

//这大大增加了代码量。请看:
printf("下面的做法产生同样的效果,但是却更加复杂了\n");
int j;//需要多声明一个变量j,单是靠变量i已经不够用了
for(i=0;i<5;i++)
for(j=0;j<5;j++)
arr[i][j]=0;


print(arr);
//你看,如果不转换一级与二级指针,
//那么就要用到2个for语句,2个循环变量
//可以发现代码量变多了。这还只是一个简单的例子而已。

printf("下面演示二级指针作为数组指针\n");
printf("很巧的是,main函数收到的第二个参数就是一个这样的例子\n");
printf("比如,运行此次程序时,我们的参数是:%s",argv[0]);
//注意argv变量(它是作为main函数的一个形参,是一个二级指针
//它指向了一个字符串数组。
//注意到,字符串指针也是一个指针,因此作为main的第二个参数的argv变量是一个二级指针,
//它同时也是一个数组指针
//我们可以让main函数不带参数,
//但是C语言也允许我们让main函数带上我给你演示的这2个参数

return 0;
参考技术A 数组类型参与运算必须先转换成指针类型。也就是说指针数组在运算过程中本来就是二级指针。

比如
int *a[10]; a参与运算的话,类型就是int **本回答被提问者采纳

一级指针与二级指针

文章目录

一级指针改变指针所指向的内容,二级指针改变一级指针的内容(即,改变一级指针变量所存储的地址)

一级指针

地址传参,指针变量接受该地址,指针解引用,代表所指向的内容,*p = ‘b’;可以表示为str=‘b’;

//一级指针改变指针所指向的内容
void GetMemory(char *p)

	*p = 'b';//指针解引用,代表所指向的内容.可以表示为str='b';

int main()

	char str='a';
	char *pb = &str;
	GetMemory(&str);
	system("pause");
	return 0;


二级指针

指针变量也是变量,是变量就有地址,用二级指针存储一级指针的地址,二级指针解引用一次,就代表一级指针。*paa = &b;相当于pa=&b;

//二级指针改变指针,使指针指向其他地址
int main()

	int a=10;
	int b = 12;
	int* pa = &a;
	int** paa = &pa;
	*paa = &b;//二级指针解引用一次,就代表一级指针。相当于pa=&b;
	system("pause");
	return 0;

int** paa = &pa;使用二级指针存储一级指针变量的地址。>*paa = &b;//二级指针解引用一次,就代表一级指针。相当于pa=&b;改变了一级指针变量存储的内容。

小结

一级指针改变指针所指向的内容,二级指针改变一级指针存储的内容(即,使一级指针指向其他变量)。在使用指针时,需要明确指针所代表的含义,这样才能更好的预防出错。

以上是关于关于二级指针与一级指针相互转换的问题!的主要内容,如果未能解决你的问题,请参考以下文章

不同类型的指针相互转换的话,需要强制类型转换

不同类型的指针相互转换的话,需要强制类型转换

不同类型的指针相互转换的话,需要强制类型转换

父类子类指针相互转换问题

一级指针与二级指针

从一级指针到二级指针