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楼的比较早给了答案 三楼的很详细。怎么办啊。。我看三楼分比较少,给三楼吧,这里非常感谢二楼的教导。
我对形参实参理解还有些差。非常感谢!!!
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()
{