c++中 指针能当全局变量么?

来源:百度知道 编辑:UC知道 时间:2024/05/22 13:55:08
#include<iostream.h>
void change(char *,char *);
char *a="123";

void main()
{
char *b="345";

cout<<a<<endl;
change(a,b);
cout<<a<<endl;
}
void change(char *str1,char *str2)
{

cout<<str1<<endl;
cout<<str2<<endl;

str1=str2;
cout<<str1<<endl;

}
这是我的程序,我想让a指向b的空间,但是最后还是输出的a原来指向内存的东西,这是为什么啊。希望能专业点的回答
太谢谢大家了!!我都想给分,特别是2楼和3楼。2楼的比较早给了答案 三楼的很详细。怎么办啊。。我看三楼分比较少,给三楼吧,这里非常感谢二楼的教导。
我对形参实参理解还有些差。非常感谢!!!

可以,指针并不是什么特别的类型。

样例程序:

#include <iostream>

int *p = nullptr;

int main()
{
    int i = 0;
    p = &i;
    *p = 1;
    std::cout << i << std::endl; //输出1
    return 0;
}

 这个程序里指针定义在函数体之外,就是个全局变量,并且可以正常使用。

注意change调用时候行为,
main函数中change(a,b); 这个调用首先把a和b的值(注意,这里是值,也就是两个字符串的地址)压栈,这个行为导致如下结果:
调用前
a指向字符串"123",b指向字符串"345"
调用change(a,b)时
在栈中的同时也有两个指针指向这两个字符串。
就是str1指向"123",str2指向"345"
也就是说,现在有四个指针。有下面的等式成立:
a==str1 && b == str2 && (&a) != (&str1) && (&b) != (&str2)
如果要实现你所说的功能,函数应该改为:

void change(char **,char **);
char *a="123";

void main()
{