C语言小问,大家有这颗帮人的心.就麻烦您了

来源:百度知道 编辑:UC知道 时间:2024/06/04 02:31:13
. 设有如下程序段
static char str[ ] = “Beijing”,*p=str;
printf(“%d\n”,strlen(p=”China”));
则执行后输出结果为
A 5 B 7 C 12 D 语法错误,输出不确定
疑问:
strlen(p=”China”) 这样也可以么.? 不是应该strlen("China”) 么
那这样strlen(p=”China”) 应该是怎么来执行呢? 麻烦大家讲解下咯..谢谢

1. 了解函数的过程,在调用函数时,系统将先计算出函数的参数,再对函数进行调用,也就是说在调用printf(“%d\n”,strlen(p=”China”)); 时,将先计算出p=”China”,再调用strlen(p=”China”),最后调用printf。
2. 了解操作符函数operator =原型,可以在MSDN中找到。操作符函数operator =将返回第一个操作数,也就是p,但它返回的是赋值后的p。所以strlen(p=”China”)相当于strlen(”China”)。

补充: 关于lilei_ll_ii同志说的答案7我不是很同意。
strlen函数是用来返回字符串长度(参考MSDN),该函数在判断字符串是否结束时,是根据字符'\0'来判断的,而不是根据char长度来判断的。在系统赋值p=”China”时,实际上是赋值”China\0”,所以不会存在你说的问题。你可以在运行时修改内存,将”China”后的字符'\0'改成其他值的试试,即可验证我的说法。

输出答案为5,没有语法错误:
printf("%d\n",strlen(p="China"));
语句的含义是,首先执行p="China",然后输出printf("%d\n",strlen(p));

P是指针,结果应该是7,strlen是计算char数组长度的,那么str[]是一个数组,P指向这个数组的首地址,那么后边把chain赋给P所指向的地址,实际上还是str数组还是占7个字节,赋值过后是chainng,所以结果是7,我也很久没做这个了,你上机试试看结果

str是静态的,用指针p就收str的首地址。
赋值给p是行不通的。因为它所指向的地址空间已经被定义为静态
赋值语句就会出错,引起指针的不稳定
所一结果就不定了

欢迎在线讨论
strlen(p=”China”)先赋值再strlen

运行了没错 是 5