文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>什么时候需要使用和怎么用指针的指针

什么时候需要使用和怎么用指针的指针

时间:2010-09-26  来源:Acikee

使用指针的指针

最近学习指针,被那个二重指针搞的挺晕的,今天特地来总结以下。使用指针的指针一般分为三种情况。

Case1:需要在子函数中改变指针的指向,既需要用指针带回一个地址时,例如

1 #include <stdio.h>

2//查询出src字符所在的位置并在rt中返回。

3 int find(char *s, char src, char **rt)

4 {

5 int i = 0;

6 while(*(s + i))

7 {

8 if(*(s + i) == src)

9 {

10 *rt = s + i;

11 }

12 i++;

13 }

14 return 0;

15 }

16

17 int main(void)

18 {

19 char a[10]= "zhuyujia";

20 char *p;

21 find(a, 'y', &p);

22 printf("%s", p);

23 return 0;

24 }

case 2:用指针的指针取二维数组的元素。

一维数组数组名想到与一个指针,而二维数组的数组名却不想当于指针的指针。所以不能这样:(这个例子是错的,以为证明不可以这样做)

1 #include <stdio.h>

2

3 int change(char **p)

4 {

5 int i, j;

6 for(i = 0; i < 5; i++)

7 {

8 for(j = 0; *(*(p + i) + j) != '\0'; j++)

9 {

10 printf("%c",*(*(p + i) + j)) ;

11 }

12 printf("\n");

13 }

14 return 0;

15 }

16

17 int main(void)

18 {

19 char a[5][10] = {"hello", "zhuyu", "jiajia", "linux","Ubuntu"};

20 change(a);

21 return 0;

22 }

若希望赋值,则不能使用指针的指针,要使用数组进行运算。

1 #include <stdio.h>

2

3 int change(char p[][10])

4 {

5 int i, j;

6 for(i = 0; i < 5; i++)

7 {

8 for(j = 0; p[i][j] != '\0'; j++)

9 {

10 p[i][j] = 'c';

11 printf("%c",p[i][j]);

12 }

13 printf("\n");

14 }

15 return 0;

16 }

17

18 int main(void)

19 {

20 char a[5][10] = {"hello", "zhuyu", "jiajia", "linux","Ubuntu"};

21 change(a);

22 return 0;

23 }

如果必须要用指针的指针需要这样做:

1 #include <stdio.h>

2

3 int change(char **p)

4 {

5 int i, j;

6 for(i = 0; i < 5; i++)

7 {

8 for(j = 0; *(*(p + i) + j) != '\0'; j++)

9 {

10 *(*(p + i) + j) = 'c';

11 printf("%c",*(*(p + i) + j)) ;

12 }

13 printf("\n");

14 }

15 return 0;

16 }

17

18 int main(void)

19 {

20 char a[5][10] = {"hello", "zhuyu", "jiajia", "linux","Ubuntu"};

21 char *b[5]={a[0],a[1],a[2],a[3],a[4]};//这样做读取和写入操作都是可以的。

22 change(b);

23 return 0;

24 }

case 3:用指针的指针指向指针数组。

1 #include <stdio.h>

2

3 int change(char **p)

4 {

5 int i, j;

6 for(i = 0; i < 5; i++)

7 {

8 for(j = 0; *(*(p + i) + j) != '\0'; j++)

9 {

10 printf("%c",*(*(p + i) + j)) ;

11 }

12 printf("\n");

13 }

14 return 0;

15 }

16

17 int main(void)

18 {

19 char *a[5] = {"hello", "zhuyu", "jiajia", "linux","Ubuntu"};//如果想使用 需使用指针数组即*a[5] 声明一个有五个字符串指针的数组。但是由于每个元素都是指针字符串,所以只能够读取,而不能够写入。

20 change(a);

21 return 0;

22 }

上述纯属个人见解,如有纰漏,还望不吝赐教。

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载