指针常见错误使用案例
指针的传递
常见错误
(1)使用一级指针
1 #include <stdio.h>
2 #include <string.h>
3 #include <malloc.h>
4
5 /**错误实例*/
6
7 void test(char *p)
8 {
9 p = (char *)calloc(1,200*sizeof(char));
10 if( p == NULL)
11 {
12 printf("error!");
13 }
14
15 strcpy(p, "1234567");
16
17 printf("son function: %s \n",p);
18 }
19
20 int main(int argc, char *argv)
21 {
22 char *str = NULL;
23
24 test(str);
25 printf("%s \n",str);
26
27 free(str);
28
29 return 0;
30 }
(2)使用二级指针错误
在这里插入代码片
注意
一级指针作为参数的时候,传入一个一级指针,只能修改它指向的数据,而不能修改它指向的地址。
二级指针作为参数的时候,二级指针作为实参传入子函数,二级指针可存入指向子函数开辟的地址。在主函数内这样我们就能修改位于二级指针指向的数据,即一级指针指向的地址了。
正确使用
方法一: 将malloc得到的内存首地址通过二级指针返回到主函数。
1 #include <stdio.h>
2 #include <string.h>
3 #include <malloc.h>
4
5 /**错误实例*/
6
7 void test(char **p)
8 {
9 *p = (char *)calloc(1,200*sizeof(char));
10 if( p == NULL)
11 {
12 printf("error!");
13 }
14
15 strcpy(*p, "1234567");
16
17 printf("son function: %s \n",*p);
18 }
19
20 int main(int argc, char *argv)
21 {
22 char *str = NULL;
23
24 test(&str);
25 printf("%s \n",str);
26
27 free(str);
28
29 return 0;
30 }
方法二 :将malloc得到的内存首地址通过函数的返回值返回到主函数。
1 #include <stdio.h>
2 #include <string.h>
3 #include <malloc.h>
4
5 /**错误实例*/
6
7 void * test(void)
8 {
9 char *p = NULL;
10 p = (char *)calloc(1,200*sizeof(char));
11 if( p == NULL)
12 {
13 printf("error!");
14 }
15
16 strcpy(p, "1234567");
17
18 printf("son function: %s \n",p);
19
20 return p;
21 }
22
23 int main(int argc, char *argv)
24 {
25 char *str = NULL;
26
27 str = test( );
28 printf("%s \n",str);
29
30 free(str);
31
32 return 0;
33 }