扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
楼主的意思明显是不能用字符串函数,要用自己的自定义函数连接
创新互联是一家集网站建设,白云鄂企业网站建设,白云鄂品牌网站建设,网站定制,白云鄂网站建设报价,网络营销,网络优化,白云鄂网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
main()
{
char s1[100]={'a','b','c','d','e','f','g','\0'};
char s2[100]={'h','i','j','k','\0'};
printf("s1=%s\n",s1);
printf("s2=%s\n",s2);
lj(s1,s2);
getch();
}
lj(char s1[],char s2[])
{
char s3[100];
int i=0,j=0;
while(s1[i]!='\0')
{
s3[i]=s1[i];
i++;
}
while(s2[j]!='\0')
{
s3[i]=s2[j];
i++;j++;
}
i++;
s3[i]='\0';
printf("s3=%s\n",s3);
}
2, 6, 42, 3
开始看到这个程序,我觉得明显有问题,可是运行了下,却极其正常。找了下资料发现,得主要是static和局部、全局量的作用域的问题。
注意这两点,然后再去分析程序:
1.静态局部变量在程序编译时被首次初始化,即以后的函数调用不再进行初始化,而是使用上次调用结束时的值。静态量数据有单独的存储区。
2.全局变量在整个函数有效,但是当某个局部变量与全局变量同名时,在该局部变量所在域内,只有该局部变量有效,与其同名的全局变量无效。
在所述程序中,全局变量i在for的{}内是无效的,起作用是静态局部变量i。而静态变量编译时初始值为1。另,for的循环控制部分在{}外,起作用的全局量i。
在下面的分析中1.指第一次循环,依此类推。
int Square(int i)
{
return i*i; //返回i^2给调用者;
}
main()
{
int i=0; //i=0;
i = Square(i); //调用Square,i=i^2,即0=0^2=0;
for ( ; i3; i++) //1.第一轮循环,i(全局)为0,满足条件
{ //2.第二轮循环开始i=1
//3.第三轮开始,i为2
//4.i=3,不符,循环退出
static int i=1; //程序编译时被赋值为1,以后不再赋值。
//1.此时用的是编译时被赋的值,即1;
//2.i(局部)为上次调用结束时的结果2
//3.原理同上,此时为6
i += Square(i); //1.i=1+1*1=2
//2.i=2+2*2=6
//3.i=6+6*6=42
printf("%d, ", i); //1.输出:2+,+空格
//2.输出:6+,+空格
//3.输出:42+,+空格
} //1.第一次循环结束,i(全局,原为0)+1,值为1
//2.第二轮循环结束,i(全局)+1,是2
//3.第三轮循环结束,i为3
printf("%d\n", i);//输出外部变量i,其值为循环 退出时的值3.
}
其实,把外部变量换个名字是一样的效果。更容易明白。如下:
int main(int argc, char* argv[])
{
int j=0;
j = Square(j);
for ( ; j3; j++)
{
static int i=1;
i += Square(i);
printf("%d, ", i);
}
printf("%d\n", j);
return 0;
}
C main是入口
D printf 是标准库函数的函数名
A ''单引号中的必须是字符型
A char a='A',b='B'
B 0为假,其他为真
sqrt函数返回值是double。表达式包含隐性转换,规则就是尽量保证数据精度不丢失。
对编程人员来说,double 和 float 的区别是double精度高,有效数字16位,float精度7位。但double消耗内存是float的两倍,double的运算速度比float慢得多,C语言中数学函数名称double 和 float不同,不要写错,能用单精度时不要用双精度(以省内存,加快运算速度)
输出结
果:cdeab
分析:只要你理解了move函数的作用你就能明白整个过程:
第一次循环调用move(char
*str,int
n)这一函数给它的参数是
s与
s的长度(就是你输入的abcde的长度5),第一步执行temp=str[5-1]=str[4],而str[4]的值为'e',所以temp的值为'e',接着执行for(i=n-1;
i0;i--)
str[i]=str[i-1];
这个循环是把从str[1]开始的所有数组的元素都后移一位,
即str[2]成了str[1],str[3]成了str[2]等等,循环执行完后执行str[0]=temp;,也就是把e赋值给了
str[0]。所以abcde被move函数处理一次后就成了
eabcd,如果再被处理一次后就被变成deabc等等
也就是说move函数每调用一次就把相应的字符串循环右移一位
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流