c语言的问题,高手进来讲解下吧

作者&投稿:氐夏 (若有异议请与网页底部的电邮联系)
c语言的简单问题,解释下吧!~

编译系统把A[]="ABCDEF",当做字符串来处理了,字符串的长度=字符的的个数+1,其中这个“1”是字符‘\0’所占的字节,‘\0’它是字符串的结束,每个字符串都有\0来表示结束的.而字符数组的长度取决于数组元素的个数,也就是说字符数组的长度=元素的个数。故A的长度为7,B的长度为6.

#include int main(){int a=100,x=10,y=20,ok1=5,ok2=0;if (x<y) //执行{if (y!=10) //执行{if(!ok1) //ok1非零为真,再取非为假,不执行{a=1;}else //执行{if(ok2) //ok2为0,逻辑值为假,不执行{a=10;}}}}a = -1; //最终赋值printf("%d
",a);return 0;}这样能看懂吗,把大括号加上去就比较好看了,其实你不用管if语句做了什么事情,在输出a之前对a进行了一次赋值:a = -1;
之后就没有对a的操作了,那输出a肯定是-1了

因为malloc函数返回的类型是void类型,如果要把这个内存分配给一个int指针变量的话,需要强制转换为int类型(例如:int* p=(int*)malloc(4);),当然如果需要分配给一个char指针变量的话,就要强制转换为char类型(例如:char* p=(char*)malloc(1);)。
简单的说,分配内存,是把申请的内存块的首地址赋值给指针变量。释放的时候,也是把这个首地址当参数给free函数,进行内存释放(free(p))。

我想你还没有搞清楚指针的意义。之所以用(int*)不用(int)是因为,在int* p=(int*)malloc(4);这个语句里,赋值对象是一个指针变量,而不是一个普通的int变量。如果是另一种情况:
double x = 2.0;
double y = 4.0;
int sum = (int)(x * y);
由于赋值对象是int变量,所以强制转换用到的是(int)

从你的问题看,我想你还没有看完或理解指针这个部分的知识。建议你先理解了指针的意义,在了解下动态内存的申请机制,问题就会迎刃而解。

(int *)是把动态分配的内存强制转换成整型指针类型,因为你申请的动态内存还不知道什么类型,类型不同是不能赋值的,所以要强制转换。


一道编程问题:C语言高手进~
答案是D y=2456是十进制数 换成8进制应该是4630(我没算,因为一看ABC就不对)o表示按8进制输出 3o表示最小宽度是3,右对齐左补空格,超过3按实际长度输出!你前两个输出不正确,是因为printf("%3o", y );你少了参数y 下一行同样的错 ...

c语言问题,高手进!
int可以表示的范围!这个题目的答案公式是:2^n,即2的n次幂。在tc下,无符号整型数unsigned int的表示范围是0~(2^16-1)在vc++中,无符号整型数unsigned int的表示范围是0~(2^32-1)所以当n=32时,2^32产生向更高位的进位,但是向高位产生的进位不能保存,因为超过了无符号整型数unsigned i...

c语言高手进。
一笔画问题是柯尼斯堡问题经抽象化后的推广,是图遍历问题的一种。在柯尼斯堡问题中,如果将桥所连接的地区视为点,将每座桥视为一条边,那么问题将变成:对于一个有着四个顶点和七条边的连通图 G(S,E),能否找到一个恰好包含了所有的边,并且没有重复的路径。欧拉将这个问题推广为:对于一个给...

C语言的问题,高手进 static 在定义局部变量时是否只能赋值一次,再次...
static意思是静态的。变量分常量和变量。只有常量只能赋值一次。是不是只能赋值一次是靠最后两个字(即常量或者变量)来区分的。static变量(如:static int n)即静态变量。静态变量也是变量,只有静态常量才只能赋值一次。变量只用定义一次。建议LZ多看看基本语法。

c语言问题,高手请进啊。。。
int i,j,k,m,a[3];for(i=101;i<666;i++){ m=i;j=0;\/\/ 将十进制的自然数 i 各位上的数字分离出来 while(m>0){ a[j++]=m%10;m=m\/10;} if(a[0]==0){ continue;} \/ a[0]+a[1]*7+a[2]*49 不是十进制数 i 的七进制表示。比如十进制数字 281 (a[0] = 1 ...

几个关于语言学的问题~需要高手帮助!
1. 从词承担句法成分的方式来说,语言有分析型 (analytic) 和综合型 (synthetic) 之分。分析型的语言几乎不用形态手段,词在承担句法成分的时候不做词形变化,而综合型的语言有丰富的形态。你说的例子“讲故事——讲清楚”之间的差异是述宾结构跟述补结构的差异,这两种结构的区别不是靠显性的语法...

C语言问题,高手速度快点进来
include <stdio.h> int main(){ long m,n,sum=0;scanf("%ld",&n);while(n!=0){ m=n%10;sum=sum+m;n=n\/10;} printf("sum=%ld\\n",sum);} 不用循环也可以,多写几次就行,不过,我觉得还是循环简单

汇编语言的高手请进,问几个简单题目
MOV BL,7FH ADC AL,BL 答:上述程序运行后,AL=80H,CF=0 2 下面程序段是判断寄存器AH和AL中第3位是否相同,如相同,AH置0,否则AH置非0。试把空白处填上适当的指令(一个空白只填一条指令)。答: xor ah,al AND AH,08H jz ZERO MOV AH,0FFH JMP NEXT ZERO: MOV AH,00...

汇编语言的问题,高手进!!!
PTR=Pointer 指针,word ptr意思是访问word类型的数据。DISP=Displacement 偏移量,表示偏移地址。

C语言 ASCII码的问题 高手请进~
这个是十六进制默认的表示方法。C,C++规定,16进制数必须以 0x开头。比如 0x1表示一个16进制数。而1则表示一个十进制。另外如:0xff,0xFF,0X102A,等等。其中的x也不区分大小写。(注意:0x中的0是数字0,而不是字母O)是0x的。

称多县17272294981: C语言的问题高手来帮我解释下什么意思 -
荣贝谷氨: 首先你是定义了一个指针数组,里面存放了两个指向字符型的指针,一个是指向字符串"****\\0",另一个是指向"*****\\0",注意每个字符串的结尾部分有一个'\\0'来标志结束,这个正是这个程序的循环可以运行的原因,接着往下看,当*s[1]!...

称多县17272294981: 高分急求!C语言编程问题,求高手解答 -
荣贝谷氨: 1、首先第四行是定义的一个子函数,在主函数内部定义的所以后面要加分号2、设定abc三个变量是题目所需,因为比较大小两个数来比较第三个变量来保存比较结果,你也可以设定两个变量,把比较结果保存到输入值中不过就会覆盖原来的值3、Z是一个子函数变量,设定在主函数中在子函数不能使用,z的生存期只有在那个max函数中才会分配内存空间4、第18行没有出来,第16行倒是可以给你解释哈,在16行他是返回比较值保存在z当中的然后在第7行那个c就会接收到max的比较结果

称多县17272294981: C语言问题,求高手解答.
荣贝谷氨: 如果只是单纯的实现问题的功能. goto语句就可以了.(虽然goto有点不利于程序可读.但是这里用goto是最直接的方法.) 下面是伪代码: firstFor: for(参数)//第一个for循环 { for(参数)//第2个for循环 { for(参数)第3个for循环 { if(条件) { goto:firstFor; } } } }不明白的再Q问吧

称多县17272294981: C语言高手进来下!请教几个问题!!
荣贝谷氨: #include<stdio.h> #include<math.h> //头文件名 预处理 main() //最好前面加个 void { int m,i,k; //定义变量 最好赋个初值 scanf("%d",&m); //以十进制方式输入m的值 k=sqrrt(m); //求m的平方根 可以在前面加(int) for(i=2;i<=k;i++) //循环 ...

称多县17272294981: c语言问题 高手来看看 -
荣贝谷氨: int change(int *x,int *y); 问题在这里.. 因为你定义的change()..返回值是int..所以你必须有一个返回值..如果你改为 void change()..就可以不用return(0);了.. 如下..你可以运行一下...#include<stdio.h> void main() { void ...

称多县17272294981: c语言问题,高手进来看下 -
荣贝谷氨: for(i=0;(c=getchar())!='\n';i+=3)就是说这个i的初值是0 c呢是个字符只要你输入的东西不是回车i就一直自加3这么循环然后输出这个i+c的字符%c是说是字符型的数据

称多县17272294981: 再问C语言的问题,求高手进来分析
荣贝谷氨: 我觉得是你的定义变量a ,b 时出的错,因为int 的取值范围是-32768~32767,你输入了40000就超过了这个范围,如果你把int 改为long int 或者Unsigned int 就ok 了,你试一下......呵呵

称多县17272294981: c语言问题.高手请进
荣贝谷氨: 你这这一步错了cost=10+(mile-3)*2+((minutes*60+seconds)/300)*2; 因为你minutes和second都是int的,当你除以一个整形后它会取整,例如 c=a/100,当a为int型且a=580时,c的值会是5,而不是你所想的5.8,所以这题你只要把minutes和second改为double型就行了( int minutes, seconds;改为 double minutes, seconds;及 scanf("%lf%d%d", &mile, &minutes, &seconds);改为scanf("%lf%lf%lf", &mile, &minutes, &seconds);)

称多县17272294981: c语言的问题...求大神讲解 -
荣贝谷氨: 因为c是char型的,当char转化为int型时会把它转化成对应的ASCLL值(就是把字符"1"转化为它的ASCLL码值49)所以x+y等于49+1=50.

称多县17272294981: C语言小问题请高手不吝赐教; -
荣贝谷氨: 如下 while(1){ printf("请输入要查的值\n"); ret=scanf("%d",&n); //输入正确的情况下ret=1,既输入为数字的话scanf返回的是1,否则返回是0 printf("ret=%d\n",ret); if(ret==0){ printf("输入错误,请重新输入\n"); continue; } break; }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网