c语言代码大全及注解,给一段C语言代码加注释越详细越好

1,给一段C语言代码加注释越详细越好2:做题 。*/#include void test(int num) num=num+300;}//引用传递void demo1(int num[]) num[0]=num[0]+500;}/*//请定义可以输出(100-200),(200-300),(300-400)的累加和的函数char[] Adding(char str[]) return intNum[];}*///课堂作业: 为数组输入数据,逆序置换后输出 。//(逆序置换是指:数组的首元素和末元素置换,第二个元素和倒数第二个元素置换,………) //10,20,30void main() /* int num=20; test(num); printf("total=%d\n",num);//20 */ int intArray[]= printf("intArray[0]=%d\n",intArray[0]);//580}
2,C语言代码结果和注释#include<stdio.h>#define f(x)x*x*xmain() int a=3,s,t; s=f(a+1); // 相当于 s = 3+1*3+1*3+1 t=f((a+1)); // 相当于 t = (3+1)*(3+1)*(3+1) printf("%d,%d",s,t);}宏定义可以直接理解成文字替换 , #define f(x) x*x*x 就是把文件里所有形如f(x)的替换成x*x*x的形式 。所以替换后的代码就是(注意运算符优先级)main()int a=3,s,t;s=a+1*a+1*a+1;t=(a+1)*(a+1)*(a+1);printf("%d,%d",s,t);//所以最后s=10,t=64}宏定义可以直接理解成文字替换,#define f(x) x*x*x 就是把文件里所有形如f(x)的替换成x*x*x的形式 。所以替换后的代码就是(注意运算符优先级)main()int a=3,s,t;s=a+1*a+1*a+1;t=(a+1)*(a+1)*(a+1);printf("%d,%d",s,t);//所以最后s=10,t=64}#include<stdio.h>#define f(x)x*x*xmain() int a=3,s,t; s=f(a+1); // 相当于 s = 3+1*3+1*3+1 t=f((a+1)); // 相当于 t = (3+1)*(3+1)*(3+1) printf("%d,%d",s,t);}
3,C语言代码求解释翻译越详细越好while是循环函数 , 小括号里的time++是控制语句 。如果time++是0的话,循环结束 , 否则一直循环(不管他为什么值) 。大括号里的love++是循环体,跟time++一样,每运行一次结果加一 。#include "circle.h"//创建一个圆实例(分配内存)circle *circle_new()circle *returnValue;returnValue = http://www.lisdn.com/gkrj/shzs/(circle *) malloc(sizeof(circle));memset(returnValue, 0, sizeof(circle));return returnValue;}//创建一个圆列表的实例(分配内存)//noOfCircle表示该列表最多容纳多少个圆//由于没有头文件,猜测该列表是通过一个数组模拟的 。(list是一个圆指针的数组)circleList *circleList_new(int noOfCircle)circleList *returnValue;returnValue = (circleList *) malloc(sizeof(circleList));memset(returnValue, 0, sizeof(circleList));returnValue->list = (circle **) malloc(sizeof(circle *)*noOfCircle);returnValue->noOfCircle = noOfCircle;return returnValue;}//根据指定的ID获得圆//circleList *aCircleList(圆列表), int circleID(圆ID)//返回指定的圆circle *circle_getCircle(circleList *aCircleList, int circleID)circle *returnValue;returnValue = aCircleList->list[circleID];return returnValue;}//打印一个圆 , 包括圆心坐标:x,y和半径rvoid circle_print(circle *aCircle)double x, y, radius;x = aCircle->x;y = aCircle->y;radius = aCircle->radius;printf("(%.5f, %.5f) with radius = %.5f\n", x, y, radius);}//打印一个列表中的所有的圆,void circleList_print(circleList *aCircleList)circle **list;circle *aCircle;int i;int noOfCircle;noOfCircle = aCircleList->noOfCircle;list = aCircleList->list;for (i = 0; i < noOfCircle; i++)aCircle = list[i];printf(" Circle %d \n", i);circle_print(aCircle);}}//检查一个圆(aCircle)是否覆盖某个点(x,y)int circle_checkWhetherCircleCoverPoint(circle *aCircle, double x, double y)int returnValue;double centerX, centerY;double radius;double leftSide, rightSide;double temp1, temp2;centerX = aCircle->x;centerY = aCircle->y;radius = aCircle->radius;temp1 = centerX - x;temp2 = centerY - y;leftSide = temp1*temp1 + temp2*temp2;rightSide = radius*radius;if (leftSide <= rightSide)returnValue = http://www.lisdn.com/gkrj/shzs/1;}elsereturnValue = 0;}return returnValue;}太长了,这看着头疼啊【c语言代码大全及注解,给一段C语言代码加注释越详细越好】
4,c语言代码求解释int *ptr1=(int *)(&a+1);//a本身是数组的首地址,那么对&a 就是a实际地址,虽然 数组a的首地址的就是&a的地址,但是,重点来了:a + 1不等于&a+1 哦 ,  a+1 的值为 a+ sizeof(int)*1最后的值为&a[1] ,&a +1的值为a + sizeof(int[5] )就是数组a 最后一个元素后面的那个地址!相当与&a[5],将这个值给ptr1 ,  那么ptr就指向了&a[5](实际没有这样一个元素),那么在prinf中ptr[-1] 的意思就是 *(ptr -1 )就为a[4]就是等于5?。。?int *ptr2=(int *)((int)a+1);//(int)a 就是把a变成一个int型数字 , 那么int(a) + 1就是这个数字加1,(int*)((int)a +1) 就 是把这个数字再变成地址保存在ptr2 中, 引用一下楼上的,数组a在内存中的存贮形式是:“a[0] 01 00 00 00a[1] 02 00 00 00a[2] 03 00 00 00a[3] 04 00 00 00 a[5] 05 00 00 00 此时ptr2在内存中就是00 00 00 02,实际值就是0x02000000.为什么是0x02 00 00 00 呢,入栈时候01 00 00 00 02 00 00 00 03 .....那么出栈时候就是02 00 00 00 00。int main() /*声明int型数组a[5]*/int a[5]= /*取数组a的地址,然后加1一个a类型的长度,将该地址*赋给ptr1效果相当于让ptr1指向了存放5的那个地址的后一个*/int *ptr1=(int *)(&a+1);/*将a[5]这个数组的首地址转换为int型然后再+1得到新地址ptr2*ptr2所指的区域占a[0]的后三个字节(int型为4字节),和*a[1]的第一个字节*/int *ptr2=(int *)((int)a+1); /*ptr1所指的是a+5这个地方,偏移量是-1故ptr1[-1] = a[4] = 5,*ptr2上面说了,然后以十六进制打印出来*/printf("%x,%x",ptr1[-1],*ptr2);return 0;}这段代码请简单 , 主要就是一个float的变量salary,然后就是一个scanf要求用户输入,然后就是倒数第二个printf语句 , 其余的printf语句都是提示语句,可有可无!还有\a \b这些都是转义字符,相信你在书上能找到他们代表干什么,就相当于\n是换行一样,只是他们的作用是别的 , 而不是换行!scanf要求你输入一个浮点型的数应该没问题吧?然后就是倒数第二个printf语句,里面有两个%.2f , .2的意思是保留两位小数,ok 应该没问题吧?int *ptr1=(int *)(&a+1);这句是让ptr1指向内存中a的地址末尾加1个字节的位置.ptr1[-1]就相当于指针向前移动一个int大小的位置,刚好就是a[5] 内存所在 。也就是ptr1[-1] = a[5];int *ptr2=(int *)((int)a+1);这句是让ptr2指向内存中a的地址开头加1个字节的位置.内存中表现如下a[0] 01 00 00 00a[1] 02 00 00 00a[2] 03 00 00 00a[3] 04 00 00 00 a[5] 05 00 00 00 此时ptr2在内存中就是00 00 00 02,实际值就是0x02000000.#include <stdio.h>int main()int a[5]=int *ptr1=(int *)(&a+1);// 定义int 类型指针;&a = a = 首地址 但是指针类型变为指向 a[5]的指针;所以后来 +1 就相当于在这个基础上加了 5*sizeof(int) 个内存单元int *ptr2=(int *)((int)a+1);//这里将指向int的指针类型直接 int 化转为地址值 +1将地址简单加 1,即简单加了1个字节的偏移量printf("%x,%x",ptr1[-1],*ptr2);//ptr1[-1]ptr1 是指向int 的指针类型 -1 即地址的偏移量 减去 1*sizeof(int) 。ptr2 是指向int类型的指针 所以这里是取他里面的内容,但是这个指针所指的地方在上面被指定了地址值,里面的内容就是在 a[5] 数组里内存单元截取的值 , 这里的值的取值 和内存的字节序有关系,就是还要看一个int值高地位是怎么存放的return 0;}

    推荐阅读