c中纠结不清的点(1)

1、int b;  char c[10];
   正确的输入语句:scanf("%d%s",&b,c);


解释:我们最开始应该会想到取值符号,所以会有scanf("%d%s",&b,&c);这种答案。但是要清楚数组名就是该数组的首地址,所以不需要加上取值符号。


2、 #inlcude <stdio.h>
int main() 

int m,n,p;
     scanf("m=%dn=%dp=%d",&m,&n,&p);
printf("%d%d%d\n",m,n,p);
return 0;
 
从键盘输入数据,格式为:m=11n=22p=33


解析:在平时我们运行程序输入数据时,大多都是11 22 33 这种中间是空格的形式,或者把空格变为换行的形式,就是输入一个数按一下回车。但是都是不规范的,虽然可以实现输入。


3、#inlcude <stdio.h>
int main() 
{
     int i=1,j=2,k=3; 
if(i++==1&&(++j==3||k++==3)) 
printf("%d %d %d\n",i,j,k); 
return 0;
}
输出的结果是:2 3 3


解析:很多人都会忽略 || 符号。当在执行if语句进行判断的时候,因为i=1,所以i++==1是true,执行完后自加1,i=2;&& 符号意思为前后两者都必须为true才行,而后者中有 || 符号,这两者中只需有一个为true即可,因为j=2,++j==3先自加1,j=3,所以++j==3为true,因为是||符号,前者正确后就不需要判断后者了,所以k的值是不变的。注意:有些环境会从后往前判断


4、关于sizeof和strlen这两个方法:
   char a[7]="a0\0a0\0";
用sizeof求其长度:sizeof(a);结果为7;
用strlen求其长度:strlen(a);结果为2,因为这个方法求长度的时候遇到'\0' 停止,不在往后进行。


   char a[]="aaa";
用sizeof求其长度:sizeof(a);结果为4,含有\0的内存空间;
用strlen求其长度:strlen(a);结果为3,不含有\0的内存空间;


5、 #include <stdio.h>
void point(char *p)
{p+=3;}

int main() 
{
char b[4]={’a’,’b’,’c’,’d’},
*p=b; 
point(p);
printf("%c\n",*p);
return 0; 

程序运行后的输出结果是( a )


解析:即便是调用了point函数,并且改变了指针p所指向的地址,但是主体函数中的指针是不会发生改变的,因为传递的参数只是主体函数中指针p的一个拷贝而已,这是两个不同的指针,只是指向了同一个内存地址而已。


6、char* str = "hello,world";
   int len = strlen(str);
   char* dest = (char*)malloc(len+1);
当用strlen方法获取到str的长度并用其为指针dest分配了同样长度的内存空间时,一定要记得len加上 1 ,给出\0 的内存空间。


7、在为一个新的字符串赋值的时候,一定记得在最后要加上 \0  。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值