首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

初学者,关于字符串指针有关问题

2013-10-13 
菜鸟求助,关于字符串指针问题如下代码:#include stdio.hvoid cp(char *a, char *b) {b a}char *cp2(c

菜鸟求助,关于字符串指针问题
如下代码:


#include <stdio.h>

void cp(char *a, char *b) {
b = a;
}

char *cp2(char *a) {
return a;
}

void main() {
char *d = "cpcp";
char *e;
char *f;
char *g = d;

cp(d, e);
f = cp2(d);
printf("%s\n", e);
printf("%s\n", f);
printf("%s\n", g);
d = "123";
printf("%s\n", d);
}

有两个问题,
第一个:为什么e是空?
第二个:为什么最后一个能打印123?不是说char *xx是存在静态存储区么?不能改变其值?

[解决办法]
引用:
最后,3L说改成&e,e本身就是指针的了,&e是个啥啊。。。。


指针也是有地址的,
char * p = "abn";
printf("%p\n", p);
printf("%p\n", &p);
[解决办法]
引用:
话说,我还是没有理解。
cp(char *a, char *b)
这两个参数都是指针啊,也就是说我改变形参b的指向应该会影响实参啊!为什么e就没随着b的指向的改变而改变呢?
其次,cp的函数体改成*b = *a也没用吧,这样相当于只是复制了字符串的首字符。
最后,如果改变了b的指向到123,那么cpcp怎么从内存中清除呢?

如果你还在死记硬背“要在函数里面改变函数外面的东西必须使用指针或引用”,那么你根本就没理解什么叫函数传参为复制什么叫指针
你传递给函数的所有参数都是复制过去的
如果你想在函数里更改函数外的某个变量,你可以传递一个指向函数外的该变量的指针给函数,这个指针复制到函数里面后,函数里和函数外的两个指针不是同一个,但指向同一个变量,这样就可以使用里面的指针修改外面的那个变量——跟外面的那个指针一点关系都没有!
所以,如果你想修改外面的某个指针——指针也是一个变量——那就该传递指向这个指针的指针给函数
话说所有死记硬背的初学者都觉得指针很神奇,我真不明白有啥神奇的,不过就是一个整型变量,它的内容是内存中的地址而已

cp的函数体改成*b = *a相当于只是复制了字符串的首字符
但这是被禁止的行为,常量字符串是不允许修改的,如果你使用VC执行这个程序,在执行到这一行的时候直接报错退出程序

cpcp这个常量字符串在程序的生存期内永远存在,直到程序退出清理所有使用内存位置

热点排行