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

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

C语言与C++ 指针函数调用 乱码 求以下程序结果和详细解释 ,求总结
程序一: 还是输出1234,因为指针p没有改变,函数调用tstfn(p)内对p的改变,不能应该原值,如果要改变指针p的值,必须传入指针的指针tstfn(&p)。程序二:输出4321,函数调用tstfn(p),传入指针p,在函数内对p指针所指向内容进行修改,原值也改变了。程序三:函数中的临时数组a,a当函数返回时,a所...

C语言和C++在语法上有那些区别?要详细具体一点!!!
C++允许多个函数拥有相同的名字,只要它们的参数列表不同就可以,这就是函数的重载(Function Overloading)。借助重载,一个函数名可以有多种用途。6、指针和引用C语言中函数传参方式有两种:传值和传址。以传值方式,在函数调用过程中会生成一份临时变量用形参代替,最终把实参的值传递给新分配的临时...

c语言和c++的区别和联系是什么?
1. 语言特性:C语言是一种过程式编程语言,注重过程和函数;而C++是一种面向对象的语言,除了过程,更注重对象、类及其操作。2. 内存管理:在C语言中,程序员负责管理所有内存分配和释放;而在C++中,除了手动管理内存外,还引入了自动内存管理,如智能指针等。3. 扩展性:相较于C语言,C++支持更多特...

c和c++具体区别?
一、基本区别 C是一种过程式语言,更注重对程序执行流程的控制,如函数、循环和条件语句的使用。而C++是基于C语言的面向对象扩展,除了过程式编程,更加强调对象的封装、继承和多态。二、详细解释 1. 语法差异:C++相较于C,新增了许多功能,例如类、对象、继承等。这些特性在C语言中是没有的。在语法...

C语言与C++有何区别与联系
所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样。之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中 ”,而就语言本身而言,在C中更多的是算法的概念。那么是不是C就不重要了,错!算法是程序设计的基础,好的设计如果没有好的算法,一样不行。而且,“C加上好的设计”也能写出非常好...

C语言和C++的区别
1、面向不同 C语言是面向过程的,C++是面向对象的。函数库 C语言有标准的函数库,它们松散的,只是把功能相同的函数放在一个头文件中;C++对于大多数的函数都是有集成的很紧密,特别是C语言中没有的C++中的API是对Window系统的大多数API有机的组合,是一个集体。但你也可能单独调用API。3...

跪求C语言函数调用的详细过程,函数之间是怎么传递的,到底是怎么发生调用...
(4)模块化程序结构 C语言的模块化程序结构用函数来实现,即将复杂的C程序分为若干模块,每个模块都编写成一个C函数,然后通过主函数调用函数及函数调用函数来实现一大型问题的C程序编写,因此常说:C程序=主函数+子函数。 因此,对函数的定义、调用、值的返回等中要尤其注重理解和应用,并通过上机调试加以巩固。 三....

谁能给我详细地解释分析一下这个程序?是关于大数相乘的。。C++
这个程序显然是C语言的,没有一点C++的特性。c++中main()返回int,输入输出一般直接cin,cout,写起来清楚很多,而且包含的头文件也不是#include <stdio.h>#include <string.h> include <stdlib.h>这样的,c++标准的库文件是没有.h后缀的,如上述分别为cstdio,string,cstdlib这三个。上边说了些...

求一个用于表白的C语言或C++的程序,谢谢大家了
define R 340 include <string.h> int main(){ char answer[10];printf("遇到你\\n我才发现\\n曾经所有的条件\\n似乎都成了我等你的借口\\n\\n");printf("我对你的感情已经决堤\\n所以\\n请允许我,从今往后映入你\\n明媚的眼\\n");printf("我\\n想和你\\n耳鬓厮磨,相濡以沫!");printf("...

c与c++的区别有哪些
1. 设计理念:C++是一种面向对象的编程语言,而C则是面向过程的。2. 核心结构:C语言以结构体(struct)为核心,C++则以类(class)为中心。3. 多态性:C语言通过宏定义(macro)提供有限的多态支持,而C++提供了包括模板(templates)在内的多种多态机制,以及运行时多态通过虚函数(virtual functions...

相似回答