指针常见错误使用案例
指针的传递
常见错误
(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 }