指针例题详解

void test2()
   {
   char string[10], str1[10]; 
   int i;
   for(i=0; i<10; i++)
   {
   str1= 'a';
   }
   strcpy( string, str1 );
   }

错误:
链接:https://www.nowcoder.com/questionTerminal/f8209ee66a1b43158ebdec8814b0cdfb?orderByHotValue=1&done=0&pos=20&onlyReference=false
来源:牛客网

第一,数组越界访问。 第二,数组名不能坐左值直接进行赋值,
第三,strcopy函数的字符串复制是只有遇到\0才停止,而str1中没有\0,所以复制的长度不确定。 第四,string和str1由于是在函数内定义,不是全局变量,所以数组内初始值不确定,strcpy复制操作具有不确定性

void GetMemory( char *p )
   {
   p = (char *) malloc( 100 );
   }
   void Test( void )
   {
   char *str = NULL;
   GetMemory( str );
   strcpy( str, "hello world" );
   printf( str );
   } 

传入中 GetMemory( char *p ) 函数的形参为字符串指针,在函数内部修改形参并不能真正的改变传入形参的值,执行完
   char *str = NULL;
   GetMemory( str );
  后的 str 仍然为 NULL

char *GetMemory( void )
   {
   char p[] = "hello world";
   return p;
   }
   void Test( void )
   {
   char *str = NULL;
   str = GetMemory();
   printf( str );
   }

错误:p是局部变量,函数返回,内存就已释放

void GetMemory( char **p, int num )
   {
   *p = (char *) malloc( num );
   }
   void Test( void )
   {
   char *str = NULL;
   GetMemory( &str, 100 );
   strcpy( str, "hello" );
   printf( str );

错误:未判断内存是否申请成功,应加上:
   if ( *p == NULL )
   {
   …// 进行申请内存失败处理

   }
   同时Test 函数中也未对 malloc 的内存进行释放。

swap( int* p1,int* p2 )
   {
   int *p;
   *p = *p1;
   *p1 = *p2;
   *p2 = *p;
   }

  在 swap 函数中, p 是一个 “ 野 ” 指针,有可能指向系统区,导致程序运行的崩溃。在 VC++ 中 DEBUG 运行时提示错误 “Access Violation” 。该程序应该改为

swap( int* p1,int* p2 )
   {
   int p;
   p = *p1;
   *p1 = *p2;
   *p2 = p;
   }

你可能感兴趣的:(C++primer学习,C++)