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

数组和指针在做函数参数时有何区别?该怎么处理

2012-03-31 
数组和指针在做函数参数时有何区别?最近看到这样一个程序:#includestdio.hvoidmystrcat(char*dest,char*

数组和指针在做函数参数时有何区别?
最近看到这样一个程序:
#include   <stdio.h>

void   mystrcat(char   *dest,   char*   source)
{
        char   *cp;
        cp=dest;
        while(   *cp   )cp++;
        while(*cp++   =   *source++);
}
int   main()
{
        char   *str1= "abcde ";
        char   *str2= "fgh ";

        mystrcat(str1,str2);
        printf( "%s ",str1);
        return   0;
}

程序运行后总是在mystrcat函数的while(*cp++   =   *source++);一句中停下不继续执行并报错,而把主函数中的char   *str1= "abcde ";改为char   str1[]= "abcde ";然后再运行就OK了,请问数组和指针在做函数参数时有什么区别啊?

[解决办法]
char *str1= "abcde "
=======
str1指向常量字符串,当然不能做目的地址
[解决办法]

char *str1= "abcde ";
相当于
const char *str1= "abcde ";
while( *cp )cp++;是可以的
但不能(*cp++ = *source++);//他指向的内存被const修饰
解决方法改成Release编译
指针和数组的区别则要另行举例


[解决办法]
str1能否认为就是常量指针呢?即等于const char* str1= "abcde ";是这样的吗?
--------------------------

[解决办法]
这是为了兼容老的语言故意留下的一个bug
"abcde "被称为literal,实际上等价于const char *
因此char * p = "abcde "把一个char * 指针指向了const char*,p指向的内容实际是不可修改的,但是从函数内部看,char*自然是可以修改的

楼上说p++的问题,实际和此无关,这里const是修饰p指向的内容,而不是p本身

如果你需要p++不行,需要这样写: char * const p
[解决办法]
如果char *str1= "abcde " 那LZ就试图修改常量字符串,报错
如果char str1[]= "abcde " 那LZ往数组str[6]里面连接字符串,将超过数组长度,可以运行,不过破坏了栈空间数据,比较危险,最好这两各字符串都在堆区分配合适的长度比较好
[解决办法]
主要原因是 str1是指向常量字符串(位于静态存储区的),它的值是不能被修改的,而数组是分配在栈内存里面的,其值可以修改,所以你改成改为char str1[]= "abcde ";就对了。

等到接分啊。。
[解决办法]
数组名作为参数传递给函数时,会自动退化为指针。
[解决办法]
char *str1= "abcde ";
char *str2= "fgh ";

str1,str2,指向的是字符串常量的地址,
while(*cp++ = *source++);
修改的是常量的内容,当然不行了,你应该知道常量是不能修改的

热点排行
Bad Request.