今天重新拿起C语言的书学习学习,遇到了一个诡异的问题,开始不可理解,现在记录下整个分析过程。
首先上代码:
#include <stdio.h>
void strcopy(char *s, char *t)
{
while ((*s++ = *t++) != '\0')
;
}
int main()
{
int i = 3;
char a[] = "abcdefg";
char *p;
strcopy(p, a);
printf("%d\n",i);
}
我估计大多数人看到这个程序都会认为会打印出3,但是结果出乎意料:
于是我分别做了两次修改,都使程序正常了。
第一次,我把strcopy函数注释掉了
#include <stdio.h>
void strcopy(char *s, char *t)
{
while ((*s++ = *t++) != '\0')
;
}
int main()
{
int i = 3;
char a[] = "abcdefg";
char *p;
//strcopy(p, a);
printf("%d\n",i);
}
打印结果是3.
第二次,我把int i = 3;移动p指针下面定义:
#include <stdio.h>
void strcopy(char *s, char *t)
{
while ((*s++ = *t++) != '\0')
;
}
int main()
{
char a[] = "abcdefg";
char *p;
int i = 3;
strcopy(p, a);
printf("%d\n",i);
}
也得到了正确的结果。
于是我用C free对原来的程序进行调试。
找到变量i的内存地址,可知其存放的是00000003,也就是数字3。
接着我执行strcopy方法后,就出状况了:
结果表明字符串被拷贝到了变量i的内存地址处。我对i处内存的内容进行十六进制转十进制,64636261转十进制后正好是1684234849.也就是这个诡异的输出结果。
综合以上的分析,所得结果如下:
#include <stdio.h>
void strcopy(char *s, char *t)
{
while ((*s++ = *t++) != '\0')
;
}
int main()
{
int i = 3; //定义int型变量i,分配内存空间,并赋值
char a[] = "abcdefg";
char *p; //定义指针p,并为初始化指针的位置,在此程序中p默认指向了i的地址
strcopy(p, a);
printf("%d\n",i);
}
现在真相大白了,不过任然让我疑惑的在指针p被定义的时候,p的默认指向地址是否有规律可循呢?任旧是个疑问,还请看到这篇文章的各位童鞋指点一二。
不过这个程序本来就是写的有问题,C语言的内存分配果然很容易出错(⊙o⊙)…
我想正确的程序应该是这样的...
#include <stdio.h>
void strcopy(char *s, char *t)
{
while ((*s++ = *t++) != '\0')
;
}
int main()
{
int i = 3;
char a[] = "abcdefg";
char *p = (char *)malloc(sizeof(a)); //给指针分配新的内存空间
strcopy(p, a);
printf("%d\n",i);
}
另外,搜索了下,函数malloc()和函数calloc() 的主要区别是前者不能初始化所分配的内存空间,而后者能。
- 大小: 2.7 KB
- 大小: 18.7 KB
- 大小: 18.7 KB
分享到:
相关推荐
c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针c语言指针...
C语言指针总结。对于学习C语言中的指针可起到一定的辅助作用。
本文针对C语言指针问题进行了详细的解析,感性趣的朋友可以看看。
C语言指针教程C语言指针教程C语言指针教程C语言指针教程C语言指针教程C语言指针教程C语言指针教程C语言指针教程C语言指针教程C语言指针教程C语言指针教程C语言指针教程C语言指针教程C语言指针教程C语言指针教程C语言...
深入理解C语言指针的奥秘.doc 深入理解C语言指针的奥秘.doc 深入理解C语言指针的奥秘.doc 深入理解C语言指针的奥秘.doc 深入理解C语言指针的奥秘.doc 深入理解C语言指针的奥秘.doc 深入理解C语言指针的奥秘.doc 深入...
C语言指针理解C语言指针理解C语言指针理解
c语言中指针是较为重要的知识点,掌握指针你会更上一层楼。
C语言指针函数和函数指针详细介绍.
本文档是适合于基础学习C语言指针到深入学习的c语言指针的总结性文档,本人能力有限,如错误之处,请告知我。
详细的讲述了C语言指针指针的用法 彻底搞定C语言指针————————————
C语言指针练习填空和阅读程序题,难度适中,便于考前复习。
介绍C语言指针,看过这个,笔试无忧 介绍C语言指针,看过这个,笔试无忧 介绍C语言指针,看过这个,笔试无忧
c语言 指针 c语言指针课件 c语言指针课件 c语言指针课件 c语言指针课件 c语言指针课件 c语言指针课件 c语言指针课件 c语言指针课件 c语言指针课件 c语言指针课件 c语言指针课件 c语言指针课件 c语言指针课件
C语言指针学习C语言指针学习C语言指针学习C语言指针学习
C语言指针C语言指针完全指南C语言指针完全指南完全C语言指针完全指南指南
C语言指针大全
C语言的精髓-指针,多做训练才能避免泄露,看吧!
C语言指针用法难点
C语言指针的运用
C语言指针课件。C语言指针方面的课件。C语言指针课件。C语言指针方面的课件。