关于二级指针与一级指针相互转换的问题!
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;改变了一级指针变量存储的内容。
小结
一级指针改变指针所指向的内容,二级指针改变一级指针存储的内容(即,使一级指针指向其他变量)。在使用指针时,需要明确指针所代表的含义,这样才能更好的预防出错。
以上是关于关于二级指针与一级指针相互转换的问题!的主要内容,如果未能解决你的问题,请参考以下文章