个人网站设计论文范文,网络营销的专业知识,网站建设服务亮点,二次网站开发提示#xff1a;关于指针 文章目录 前言一、指针的使用总结 前言
在看c书籍的时候#xff0c;看到浅复制和深复制时#xff0c;说到成员为指针的时候#xff0c;会出异常。但是其实没有更多的感想#xff0c;但是联想到上次考试指针没分配空间导致程序异常的情况#xf… 提示关于指针 文章目录 前言一、指针的使用总结 前言
在看c书籍的时候看到浅复制和深复制时说到成员为指针的时候会出异常。但是其实没有更多的感想但是联想到上次考试指针没分配空间导致程序异常的情况所以现在再验证一下。 提示以下是本篇文章正文内容下面案例可供参考
一、指针的使用
以下是验证代码。
int main()
{//这边是异常的因为没有给指针分配空间这个上次考试的时候也遇到了不过通过调试发现了改了。当时真是醍醐灌顶切记。char *p NULL;char str[] hello;memcpy(p, str, strlen(str));printf(%s,p);//这边是异常的因为没有给指针分配空间int *p2 NULL;int data 12;*p2 data;printf(%d,*p2);//打印12//这个是正常的跟预想的不一样。int *p3 NULL;int data3 12;p3 data3; //这边p指向了data的数据空间 p也就是被分配了空间printf(第一次打印p3:%d\n,*p3);int dataTest 22;*p3 dataTest;printf(第二次打印p3:%d\n,*p3);printf(打印data3:%d\n,data3); //这里注意data3的值也被改了return 0;
}
感想其实里面涉及到一个问题就是空指针不能解引用。
另外空指针可以被另一个指针赋值即指针指向另一个内存空间。
为了深入了解一下指针的使用百度了一些资料如下 指针与内存 在C中一个指针必须在被分配内存之后才能进行直接赋值的操作如果没有进行内存的分配直接对指针进行赋值是会编译错误的例如 int *p123; //这样是不可取的 我们平时常用的分配内存方式是分配【栈内存】例如 int k123;
int *pk; *p345;
coutk; 因为123被放入了一个变量k中系统为变量k分配了内存指针p指向一个有内存空间的地址之后就可以直接进行赋值了. 动态分配内存 在系统中除了分配【栈内存】的方式外还可以分配【堆内存】分配方式如下 int *pNULL;
pnew int; //分配堆内存
*p123; //分配了内存之后就可以直接进行赋值操作了 关于指针赋值给指针 在C语言中可以使用指针赋值运算符将一个指针的值赋给另一个指针。指针之间的赋值实际上是将一个指针变量的值即内存地址赋给另一个指针变量。例如假设有两个指针变量ptr1和ptr2可以通过以下方式将ptr1的值赋给ptr2cptr2 ptr1;此时ptr2将指向与ptr1相同的内存地址。需要注意的是指针之间的赋值只是将内存地址赋给了另一个指针变量而不是复制指针指向的内容。因此修改其中一个指针指向的内存中的值也会影响另一个指针。cint a 10;int* ptr1 a;int* ptr2;ptr2 ptr1; // 将ptr1的值赋给ptr2*ptr2 20; // 修改ptr2指向的内存中的值printf(%d, *ptr1); // 输出20因为ptr1和ptr2都指向同一块内存 欢迎补充。 总结
所以根据以上验证得出一个结论就是浅拷贝的主要问题就是导致两个指针指向同一块内存存在潜在的风险