task1:
程序执行输出结果是:
- Sun,f,90,Qian,f,95
- Sun,f,90,Li,m,100
- Zhao,m,85,Qian,f,95
- Zhao,m,85,Li,m,100
在主函数中,定义了stu结构体类型的对象a,b,并赋好了值。并且让a.next = &b ,把b的地址赋给a的next指针,通过a.next可以找到b。
在fun函数中,形参a与实参a只有值传递的关系,在fun函数内进行数据交换不会改变实参的值。但是最后一句*a.next = d;有改变,因为a.next 是b,而*a.next = d 相当于*b = d,取b的内容,令其等于d。因此b的内容改变了。
task2:改错题
int main()
{
char* src = "hello,world";
char* dest = NULL;
int len = strlen(src);
dest = (char*)malloc(len);
char* d = dest;
char* s = src[len];
while(len-- != 0)
d++ = s--;
printf("%s",dest);
return 0;
}
int main()
{
char* src = "hello,world";
char* dest = NULL;
int len = strlen(src);
/* 内存空间分配不足,还要给'\0'一个空间 */
dest = (char*)malloc(len + 1);
char* d = dest;
/* 取地址,len = '\0', len-1 = 最后一个字符 */
char* s = &src[len-1];
while(len-- != 0)
/* 右左规则:相当于*(d++) = *(s++),赋值要取内容 */
*d++ = *s--;
/* 要加入字符串结束符 */
*d = '\0';
printf("%s",dest);
/* 使用完,应当释放空间,以免造成内存汇泄露 */
free(dest);
/* 防止产生野指针 */
dest = NULL;
return 0;
}
找出题中错误,并解释
void test1()
{
char string[10];
char* str1 = "0123456789"
strcpy(string, str1);
}
段错误:string[10]中只有10个元素,但是str1有10个字符+一个结束符\0,一共11个字符
找出题中错误,并解释
void GetMemory( char *p )
{
p = (char *) malloc( 100 );
}
void Test( void )
{
char *str = NULL;
GetMemory( str );
strcpy( str, "hello world" );
printf("%s", str);
}
GetMemory()函数中是值传递方式,应该改成:
void GetMemory2(char **p)
{
*p = (char *)malloc(100);
}
//传进来的是str的指针地址,*p就是原来的str