指针方面的题目

 

试题1:

void test1()

{

   char string[10];

   char* str1 = "0123456789";

    strcpy( string, str1 );

}

试题2

void test2()

{

   char string[10], str1[10];

     int i;

     for(i=0; i<10; i++)

     {

        str1[i] = 'a';

     }

     strcpy( string, str1 );

}

试题3

void test3(char* str1)

{

   char string[10];

   if( strlen( str1 ) <= 10 )

     {           

strcpy( string, str1 );

     }

}

 

写一个strcpy函数

//实现链式操作,将目的地址返回

char * strcpy( char *strDest, const char *strSrc ) 

{

 assert( (strDest != NULL) && (strSrc != NULL) );

char *address = strDest; 

 while( (*strDest++ = * strSrc++) != /0 );

  return address;

}

 

写一个strcpy函数

int strlen( const char *str )    //入参数const

{

     assert( strt != NULL );    //断言字符串地址非0

     int len;

     while( (*str++) != '/0' )

     { 

            len++;

     }

     return len;

}

 

试题4

void GetMemory( char *p )

{

   p = (char *) malloc( 100 );

}

void Test( void )

{

   char *str = NULL;

   GetMemory( str );

   strcpy( str, "hello world" );

   printf( str );

}

str仍然NULL

试题5

char *GetMemory( void )

{  

     char p[] = "hello world";      

     return p; 

}

void Test( void )

{  

     char *str = NULL; 

     str = GetMemory();   

     printf( str );   

}

p[]组为函数内的局部自动变量,在函数返回后,内存已放。

试题6

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 )

{

   ...//行申内存失败处

}

试题7

void Test( void )

{

     char *str = (char *) malloc( 100 );

     strcpy( str, "hello" );

     free( str );

     ...  //省略的其它

}

试题7存在与试题6问题,在

char *str = (char *) malloc(100);

后未行内存是否申成功的判断;另外,在free(str)后未置str空,致可能成一个“野”指加上:

str = NULL;

 

在看看下面的一段程序有什么错误

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;

}
<think>嗯,用户让我用中文回答或者介绍一下几个C语言指针编程题目。首先,我需要理解用户的需求。他们可能正在学习C语言,尤其是指针部分,想要通过一些练习题来巩固知识。指针在C语言中确实是一个难点,容易出错,所以练习是很重要的。 接下来,我需要考虑提供什么样的题目题目应该覆盖指针的不同应用场景,比如基本操作、数组、字符串、函数指针、动态内存分配等。题目难度要由浅入深,这样适合不同水平的学习者。同时,题目要有实际意义,能够帮助理解指针的核心概念,比如地址操作、指针算术、指针与数组的关系等。 然后,我应该确定题目的数量。用户可能希望得到足够多的题目来练习,但又不至于太多。通常,5到10个题目比较合适,既涵盖主要知识点,又不让用户感到压力太大。比如,可以包括交换变量、数组逆序、字符串操作、函数指针应用、动态内存管理等题目。 接下来,每个题目需要给出具体的要求和示例,这样用户知道要做什么。比如第一个题目可以是交换两个变量的值,使用指针来实现。这虽然基础,但能帮助理解指针的基本操作。然后逐渐增加难度,比如数组逆序,这时候需要用到指针遍历数组,并且进行元素交换。 还要注意题目的实用性,比如字符串反转、合并数组、查找最大最小值等,这些都是实际编程中常见的问题。同时,高级题目可以涉及动态内存分配,比如创建二维数组,这需要理解指针指针和内存管理,避免内存泄漏。 另外,可能用户希望题目有一定的挑战性,但不要太难。比如使用函数指针进行排序,或者实现链表操作,这些题目能够综合运用指针和结构体的知识。但考虑到用户可能还在初级阶段,链表题目可以作为可选的高级练习。 在组织答案时,需要分点列出每个题目,给出题目描述、要求以及示例输入输出。这样用户能够清晰地看到每个任务的具体内容。同时,可能需要提醒用户注意指针使用中的常见错误,比如空指针、野指针等问题,但用户没有明确要求,可能在回答中不需要详细说明,除非题目本身涉及到这些点。 最后,检查是否有遗漏的重要知识点,比如指针与函数参数传递、指针数组和数组指针的区别等。可能需要在题目中涵盖这些方面,但可能通过现有的题目已经有所涉及,比如交换变量涉及函数参数传递,数组逆序涉及指针算术和数组操作。 总结下来,应该提供大约8个题目,覆盖基本操作、数组、字符串、函数指针、动态内存、结构体链表等,难度逐步提升,每个题目有明确的要求和示例,帮助用户有效练习指针的应用。</think>以下是一些适合练习 **C语言指针编程** 的题目,涵盖不同难度和常见应用场景: --- ### **基础题目** 1. **交换两个变量的值** - 要求:用指针实现交换两个整数的值,不使用临时变量。 - 示例:输入 `a=3, b=5`,输出 `a=5, b=3`。 2. **数组逆序输出** - 要求:使用指针将数组元素逆序存放(如 `[1,2,3,4]` → `[4,3,2,1]`),并输出结果。 3. **计算字符串长度** - 要求:用指针实现类似 `strlen` 的功能,计算字符串的长度(不调用库函数)。 4. **字符串反转** - 要求:用指针将字符串原地反转(如 `"hello"` → `"olleh"`)。 --- ### **进阶题目** 5. **二维数组遍历与求和** - 要求:用指针遍历二维数组,计算所有元素的和。 - 示例:输入 `{{1,2}, {3,4}}`,输出 `10`。 6. **动态内存分配实现数组合并** - 要求:输入两个有序数组,用指针和动态内存分配合并成一个新有序数组。 - 示例:输入 `[1,3,5]` 和 `[2,4,6]`,输出 `[1,2,3,4,5,6]`。 7. **查找数组中的最大值和最小值** - 要求:用指针遍历数组,找到最大和最小值,并通过指针参数返回结果。 8. **函数指针应用:排序算法** - 要求:使用函数指针实现升序或降序排序(如根据输入的标志位选择排序方式)。 --- ### **高阶题目** 9. **链表操作** - 要求:用指针实现链表,完成插入、删除、遍历等操作(需自定义结构体)。 10. **动态创建二维数组** - 要求:用指针指针动态分配一个 `n×m` 的二维数组,并初始化为特定模式(如全0或蛇形填充)。 11. **字符串分割函数** - 要求:用指针实现类似 `strtok` 的功能,按指定分隔符分割字符串。 --- ### **示例代码框架(以题目1为例)** ```c #include <stdio.h> void swap(int *a, int *b) { // 通过指针交换值 } int main() { int x = 3, y = 5; swap(&x, &y); printf("x=%d, y=%d\n", x, y); // 输出 x=5, y=3 return 0; } ``` --- 通过这些题目,可以深入理解指针的以下核心概念: - 指针与地址的关系 - 指针算术运算(如 `ptr++`) - 动态内存管理(`malloc`/`free`) - 函数指针与回调机制 - 指针与数组的关联与区别 建议先独立实现,再对比参考答案调试!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值