C语言与C++ 指针函数调用 乱码 求以下程序结果和详细解释 ,求总结

程序一:
#include "stdio.h"
void tstfn(char *q)
{
char a[5]="4321";
q=a;
}
void main()
{
char a[5]="1234",*p=a;
tstfn(p);
printf("%s",p);
}
程序二:
#include "stdio.h"
void tstfn(char *q)
{
char a[5]="4321";
strcpy(q,a);
}
void main()
{
char a[5]="1234",*p=a;
tstfn(p);
printf("%s",p);
}
程序三:
#include "stdio.h"
char *tstfn()
{
char a[5]="4321";
return a;
}
void main()
{
char a[5]="1234",*p;
p=tstfn();
printf("%s",p);
}
程序四:
#include "stdio.h"
char *tstfn()
{
char a[5]="4321";
char *q=a;
printf("%s\n",q);
return q;
}
void main()
{
char a[5]="1234",*p=a;
p=tstfn();
printf("%s",p);
}
程序五:
#include "stdio.h"
void main()
{
char *str="test string";
int i;
for(i=0;i<4;i++,str++)
*str='a';
printf("%s",str);
}
程序六:
#include "stdio.h"
void main()
{
char a[20]="test string";
char *str=a;
int i;
for(i=0;i<4;i++,str++)
*str='a';
str=a;
printf("%s",str);
}

程序一: 还是输出1234,因为指针p没有改变,函数调用tstfn(p)内对p的改变,不能应该原值,如果要改变指针p的值,必须传入指针的指针tstfn(&p)。
程序二:输出4321,函数调用tstfn(p),传入指针p,在函数内对p指针所指向内容进行修改,原值也改变了。
程序三:函数中的临时数组a,a当函数返回时,a所指向的内容已经销毁,a成为野指针,一个随机值,非法返回a的值,对其使用,造成引用的非法内存。
程序四:同程序三,p也是一个临时变量,程序结束也被销毁了,非法引用,也会造成非法引用内存。
程序五:内存报错,对字符串的赋值不正确,因为str是指向一个字符串常量,*str = ‘a’试图更改一个字符串常量,所以出错了。
程序六:
正确
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-28
程序1结果 是undefine .因为指针P指向的内存是在函数tstfn中分配的,调用tstfn函数返回后,对应的内存将被释放.

程序2,结果是将函数tstfn中数组a的内容COPY出来了,不过不建议这样作,因为如果tstfn函数中的数组a的长度如果比调用前所分配的数组a的长度要长的话,将会导致数组超界 .

程序3.结果跟程序1一样,不过函数表达方式不一样.tstfn函数调用结束后,,内存依然被释放

程度4,在程序3的基础上加打印输出了一行,内存依然被释放.
程序5.输出 aest string .定义指针str的时候同时初始化了该指针,使其指向了字符串常量"test string"的首地址, *str='a';是将str指向的地址的内容改为'a'.所以输出结果是 aest string
程序6 输出 aaaa string for循环将数组指针str所指的内存地址往后4个字节的内容均改成'a'.在这之前str是指向数组a的首元素的.即将数据a的前4个元素改为'a'. 所以输出 aaaa string

数组和指针有一定的共同性,有些情况下可以通用.
希望您能采纳本回答被提问者采纳
相似回答