C语言双指针问题题

关于C语言指针的问题_百度知道
关于C语言指针的问题
利用strcpy函数,allocbuf数组由abcdefg改变成abcdHelloWorld。为什么把【strcpy(p,s)】改变成【P=&quot,allocbuf数组则不会发生改变。指针P中不应该是allocbuf数组第四个空间的地址吗;HelloWorld&】指针P得到alloc函数返回数组allocbuf第四个空间的地址
我有更好的答案
它能改变吗?它的意思是“创建一个常字符串HelloWorld,并把第一个字符的地址赋给指针变量p”。既然是“常字符串”知道P=&HelloWorld&的确切意思吗
采纳率:75%
第一种写法表示定义一个指向double的指针,a1所指向的内容不允许通过a1去改变,第二种写法语法上就是错误的。
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。22被浏览4,742分享邀请回答6添加评论分享收藏感谢收起232 条评论分享收藏感谢收起一个C语言指针有关问题 - C语言当前位置:& &&&一个C语言指针有关问题一个C语言指针有关问题www.MyException.Cn&&网友分享于:&&浏览:1次一个C语言指针问题
今天重新拿起C语言的书学习学习,遇到了一个诡异的问题,开始不可理解,现在记录下整个分析过程。首先上代码:#include &stdio.h&
void strcopy(char *s, char *t)
while ((*s++ = *t++) != '\0')
int main()
int i = 3;
char a[] = "abcdefg";
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";
//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";
int i = 3;
strcopy(p, a);
printf("%d\n",i);
}也得到了正确的结果。于是我用C free对原来的程序进行调试。找到变量i的内存地址,可知其存放的是,也就是数字3。接着我执行strcopy方法后,就出状况了:结果表明字符串被拷贝到了变量i的内存地址处。我对i处内存的内容进行十六进制转十进制,转十进制后正好是.也就是这个诡异的输出结果。综合以上的分析,所得结果如下:#include &stdio.h&
void strcopy(char *s, char *t)
while ((*s++ = *t++) != '\0')
int main()
int i = 3;
//定义int型变量i,分配内存空间,并赋值
char a[] = "abcdefg";
//定义指针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() 的主要区别是前者不能初始化所分配的内存空间,而后者能。
感觉 这跟中国的"走进科学"节目一样,"这个是一个很诡异的C程序"诡异在何处?哦,楼主还拿出那么多科学证明过程,最后的结果是,楼主原来是C语言不好就像中国西部发生的一件很诡异的事情一个农民家每天早晨起来都发现鞋子再床上,经过专家研究,探讨,最后得出结论是,这个农民晚上没洗脚,并且是穿鞋子睡觉的哈哈,lz应该把《c和指针》多看几遍,野指针而已,基础不扎实,觉得什么都诡异。
新手 小白吧p你只定义了一个指针,没有分配变量空间,运行中无意占用了i的空间。这都不清楚?一般这样 char str[128];char * p=strcpy(p,a);估计是老师教的不好,指针是c语言基础一定要扎实.
2. t根本就是未分配的地址,这样的拷贝根本随编译器的开心在任一地址中乱写。 微软vc的保护函数在这一方面做出了改进,但是可惜没有成为标准,否则用strcpy_s就能预防这种情况。glibc就比较陈旧了。讨厌的地方是总提示 strcpy deprecated ...有时我就是想用 strcpy 啊 ...
ray_linn 写道2. t根本就是未分配的地址,这样的拷贝根本随编译器的开心在任一地址中乱写。 微软vc的保护函数在这一方面做出了改进,但是可惜没有成为标准,否则用strcpy_s就能预防这种情况。glibc就比较陈旧了。讨厌的地方是总提示 strcpy deprecated ...有时我就是想用 strcpy 啊 ...这个warning是可以屏蔽的吧,不过我还是会尽量用_s,至少可以防止缓冲区溢出。
liusondark 写道为什么我用VC++运行不了不太清楚,vc我不太会用,还是比较习惯gcc编译,C Free用的比较顺手lz有zb的嫌疑
rokuan 写道liusondark 写道为什么我用VC++运行不了不太清楚,vc我不太会用,还是比较习惯gcc编译,C Free用的比较顺手lz有zb的嫌疑恭喜你,答对了
野指针本来就不可预料吧一些好的编程习惯可以避免野指针
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有

我要回帖

更多关于 指针悬挂问题 的文章

 

随机推荐