C语言:深复制VS浅复制 数组VS指针
2012-04-19 16:45
176 查看
计算机是32位的,编译器是dev-cpp。
C源码:
运行结果为:
C源码:
#include <stdio.h> struct student{ char *name1; char name2[20]; }stu; int main() { struct student *p; p = &stu; //strcpy((*p).name1,"first");// 编译正确,运行错误,因为没有分配空间。 strcpy((*p).name2,"second"); // 深复制:复制数组所有的字符 printf("name1 = %s \t name2 = %s\n",(*p).name1,(*p).name2); p->name1 = "third"; // 浅复制,只复制内存地址 printf("name1 = %s \t name2 = %s\n",(*p).name1,(*p).name2); //p->name2 = "fourth"; //编译错误: incompatible types in assignment of `const char[7]' to `char[20]' char tp[20]="fifth"; //p->name2 = tp; //编译错误:ISO C++ forbids assignment of arrays // 深复制和浅复制的区别 strcpy((*p).name2,tp); p->name1 = tp; tp[0]='F';//修改tp字符串的值 printf("name1 = %s \t name2 = %s\n",(*p).name1,(*p).name2); // 浅复制的值发生改变,深复制不会 // 字符串数组和指针的区别 printf("sizeof(char *name) = %d\nsizeof(char name[20]) = %d\n", sizeof(p->name1), sizeof(p->name2)); // 32位计算机4和20 system("PAUSE"); return 0; }
运行结果为:
name1 = (null) name2 = second name1 = third name2 = second name1 = Fifth name2 = fifth sizeof(char *name) = 4 sizeof(char name[20]) = 20
相关文章推荐
- c语言把一个数组里面的部分值直接复制到另外一个数组
- c语言-链表VS数组
- 如何利用C语言实现数组复制的功能
- c语言-链表VS数组
- C语言中关于未填满字符数组的值(VS2015)
- c语言把一个数组里面的部分值直接复制到另外一个数组
- c语言复制数组的函数
- C语言中使用struct实现数组复制
- 【C语言】将一数组元素复制到另一个数组中
- C语言一维数组复制
- C语言 数组VS指针
- C语言数组实现冒泡排序和选择排序程序
- c语言中的字符数组与字符串
- C语言 数组
- C语言之指针、数组和函数
- C语言数组与指针详解
- 《C语言及程序设计》实践项目——字符串数组
- C语言提高-第23/24/25讲: 指针的运算/数组名作为函数参数/指针作函数参数(一维数组Vs指针)
- IOS成长中 C语言之数组一
- 【c语言】将字符数组s2中的全部字符复制到字符数组s1中,不要用strcpy函数,'\0'也复制过去,'\0'后面的字符不复制