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

请问,怎么把字符串常量当作函数参数传入,多谢

2012-03-31 
请教,如何把字符串常量当作函数参数传入,谢谢!例如下面的情况,想通过print函数把DEST_STR打印出来。能否直

请教,如何把字符串常量当作函数参数传入,谢谢!
例如下面的情况,想通过print函数把DEST_STR打印出来。
能否直接把DEST_STR赋值给print,求解,谢谢!
//我实验了以下两种方式,都可以正常打印出来,请问哪种方式是对的,更合适?

C/C++ code
#define DEST_STR    "shanghai" void print(char* pstr){        printf("%s",pstr);}//我实验了以下两种方式,都可以正常打印出来,请问哪种方式是对的,更合适?print(&DEST_STR);print(DEST_STR);


[解决办法]
都是对的,区别在于
第一种:你可以对参数做修改,做的修改可以传递到函数外的变量
第二种:你可以对参数做修改,但做的修改不可以传递到函数外的变量,即变量还是原来的值,如:
char buf[7]="abcde"
void print(char* pstr)
{
pstr[2] = 'm';
printf("%s",pstr);
}
调用完成后buf还是"abcde"

[解决办法]
???传进去的是指向常量字符串的指针,你怎么能改变它?

和你举例的情况不一样,你的例子里字符串是存在变量里面的,而LZ的字符串却是个常量。

常量字符串本来就是用指针来传递和表达的,对它取&是没意义的操作。
[解决办法]
C/C++ code
print(DEST_STR);//这个
[解决办法]
gcc
第一种
error: cannot convert ‘const char (*)[9]’ to ‘char*’ for argument ‘1’ to ‘void print(char*)’
[解决办法]
扯淡 指针传递只是复制指针 指向的内存是不复制的 所以你对那块内存的修改都是直接修改 唯一不改的是你传进去之前那个指针的位置(即被复制的那个地址)
探讨

都是对的,区别在于
第一种:你可以对参数做修改,做的修改可以传递到函数外的变量
第二种:你可以对参数做修改,但做的修改不可以传递到函数外的变量,即变量还是原来的值,如:
char buf[7]="abcde"
void print(char* pstr)
{
pstr[2] = 'm';
printf("%s",pstr);
}
调用完成后buf还是"a……

[解决办法]
给字符串常量取地址没见过,不过会出现4楼的转换,会出错吧
[解决办法]
dev-cpp上试了下第一种编译不过,要加显示类型转换才行。

热点排行
Bad Request.