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

数组名++,该如何处理

2012-03-31 
数组名++C/C++ code#include stdio.h//#include string.hchar *str_cpy(char str1[],char str2[]){whi

数组名++

C/C++ code
#include <stdio.h>//#include <string.h>char *str_cpy(char str1[],char str2[]){    while(*str1++=*str2++);    str1=str1+1;    return str1;}int main(){    char str1[]="jxnuzhouguohong";    char str2[]="come on";    str_cpy(str1,str2);    puts(str1);    return 0;}


最近在琢磨传引用和动态分配内存的时候,想到了strcpy这个函数,如果形参是数组名的话,自增没问题,但是如果str++;不是说数组名是常量吗?怎么不报错呢?

[解决办法]
char str1[],char str2[])在参数里已经是指针了吧?
char str2[]="come on";
str2++这样应该是有问题的吧
[解决办法]
数组名做参是自动退化为指针(非常量)。
[解决办法]
探讨

引用:

数组名做参是自动退化为指针(非常量)。


为什么自动退化呢?

[解决办法]
函数的形参一定是变量。形参的char str[]和char *str没有本质区别。
写成数组形式只是强调函数中按数组处理各个元素,而写成指针变量形式还含有返回参数的意义。
调用函数时传递实参,实质上是用实参表达式的值对形参变量进行初始化。
在函数内用sizeof()可以检验出形参是指针变量还是数组。

热点排行