c语言

C语言真的存在"趋向于运算符"吗?

此生再无相见时 提交于 2020-03-12 03:10:58
在某乎看到有人说C语言有个非常鲜为人知的运算符-- 趋向于运算符 差不多就是下面这样: #include<stdio.h> int main(void) { int conut = 10; while (conut --> 0) //注意这里是两个短横线, 并非指针型的成员操作符 { printf("conut = %d\n", conut); } return 0; } 输出: conut = 9 conut = 8 conut = 7 conut = 6 conut = 5 conut = 4 conut = 3 conut = 2 conut = 1 conut = 0 初看感觉没毛病, 但是这东西也经不起推敲, 下面我详细说明下: #include<stdio.h> int main(void) { int conut = 10; printf("return: %d", conut --> 0); return 0; } 输出: return: 1 其实从这里我们就可以看出, 所谓的"趋向于运算符", 不过是先把conut和0相比较, 再将conut自减1罢了 所以, 站在编译器的角度看, 那行代码其实是这样子的: while (conut-- > 0) //为方便对比, 便再次贴出原代码 while (conut --> 0) /

求助c语言单链表操作问题

佐手、 提交于 2020-03-12 02:02:05
这里是刚学习数据结构的小白,有个问题想请教一下。 //结构体声明 typedef struct Node { ElemType data ; struct Node * next ; } Node , * LinkList ; //初始化单链表 void InitList ( LinkList * L ) { * L = ( LinkList ) malloc ( sizeof ( Node ) ) ; ( * L ) -> next = NULL ; } LinkList 本来就是一个结构体指针 这里为什么用LinkList *L 我将程序写成 void InitList(LinkList L){ L=(LinkList) malloc(sizeof(Node)); L->next=NULL; } 他会出现报错 包括写逆置算法的时候也用到了 来源: CSDN 作者: weixin_45840488 链接: https://blog.csdn.net/weixin_45840488/article/details/104802990

我的第一篇博客

天大地大妈咪最大 提交于 2020-03-12 01:56:36
今天是我的第一节编译原理的上机课,在这节课中我了解了许多在知乎中许多人关于《编译原理》这门课的看法与理解。 在看了许多前辈们的学习心得之后,我发现《编译原理》这门课就像是所有编程课程的老师。我们正在学习c语言,不能说我们在没有学习《编译原理》之前无法学会c语言,而是说如果我们再《编译原理》这门课的辅助下学习c语言,那么我们学习的会更加深层次,而不是单纯的记住代码,而是可以理解代码的使用原因和性质。就好比开车的例子,如果我们仅仅学会c语言,那我们就只能做个好司机,但是如果我们学习的编译原理,那么我们就可以当一名赛车手,我们了解汽车的性能,我们可以根据自己的需求去改装修理汽车。因此,《编译原理》可以帮助我们成为一名更加强大的程序员。不可否认《编译原理》的学习是一个枯燥的过程,但是枯燥的背后就是成功!对于《编译原理》的学习其实很简单,就是勤快。我们要有耐心的去学习,不仅要上课认真听,课前还需要认真预习,这样子就可以在课堂上更好的吸收知识。《编译原理》这门课程十分复杂,我们不仅仅要学习课堂上的知识,还要在课外找许多关于编译原理的经典著作,花多点时间认真专研。虽然编译原理的理论知识很多,但总所周知,理论最终还是需要用于实践,所以我们要实践与理论相结合,更好的运用知识点!!! 来源: https://www.cnblogs.com/miranda-76/p/5857570.html

leetcode2(两数相加)--C语言实现

 ̄綄美尐妖づ 提交于 2020-03-11 17:37:07
求: 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807 解: struct ListNode* addTwoNumbers( struct ListNode* l1, struct ListNode* l2){ struct ListNode* resultList = ( struct ListNode*)malloc( sizeof ( struct ListNode)); struct ListNode* currentNode = resultList; int x,y; int carry = 0 ; while (l1!=NULL || l2!=NULL){ if (l1==NULL){ x= 0 ; } else { x=l1 -> val; l1=l1 -> next; } if (l2==NULL){ y= 0 ; } else { y=l2 -> val; l2=l2 -> next; } struct

C语言描述链表的实现及操作

点点圈 提交于 2020-03-11 17:05:39
一.链表的创建操作 // 操作系统 win 8.1 // 编译环境 Visual Stuido 2017 #include<stdio.h> #include<malloc.h> #include<stdlib.h> typedef int ElementType; // 定义数据类型,可根据需要进行其他类型定义 // 链表节点的定义 typedef struct ListNode { ElementType Element; // 数据域,存放数据 ListNode* Next; // 指向下一个链表节点 }Node, *PNode; // 链表创建函数定义 PNode CreateList(void) { int len ; // 用于定义链表长度 int val ; // 用于存放节点数值 PNode PHead = (PNode)malloc(sizeof(Node)); // 创建分配一个头节点内存空间//头节点相当于链表的哨兵,不存放数据,指向首节点(第一个节点) if (PHead == NULL) // 判断是否分配成功 { printf("空间分配失败 \n"); exit(-1); } PNode PTail = PHead; // 链表的末尾节点,初始指向头节点 PTail->Next = NULL; // 最后一个节点指针置为空 printf(

C语言中的神兽strdup

混江龙づ霸主 提交于 2020-03-11 16:24:21
  C语言的确博大精深,在C语言的世界中遨游了那么多年,发现自己仍是菜鸟一枚,很多利器没有能够驾驭,今天介绍一个神兽,威力无比,但是却很少人能用得好。 函数原型: #include <string.h> char *strdup(const char *s); 函数介绍:   strdup()函数是c语言中常用的一种字符串拷贝库函数,一般和free()函数成对出现。 strdup()在内部调用了malloc()为变量分配内存,不需要使用返回的字符串时,需要用free()释放相应的内存空间,否则会造成内存泄漏。该函数的返回值是返回一个指针,指向为复制字符串分配的空间;如果分配空间失败,则返回NULL值。 函数实现: char * __strdup(const char *s) { size_t len = strlen(s) +1; void *new = malloc(len); if (new == NULL) return NULL; return (char *)memecpy(new,s,len); } 函数实战: #include <syslib.h> #include<string.h> int main(void) { char *src =”This is the strdup test”; char *dest; dest = strdup(s); printf(

leetcode167(两数之和II)--C语言实现

孤者浪人 提交于 2020-03-11 14:34:36
求: 给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。 函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2。 说明: 返回的下标值(index1 和 index2)不是从零开始的。 你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。 示例: 输入: numbers = [2, 7, 11, 15], target = 9 输出: [1,2] 解释: 2 与 7 之和等于目标数 9 。因此 index1 = 1, index2 = 2 。 解: int * twoSum( int * nums, int numsSize, int target, int * returnSize){ int index1= 0 ; int index2=numsSize- 1 ; while (index1!=index2){ if (nums[index1]+nums[index2]==target){ *returnSize = 2 ; int * returnArr = ( int *)malloc( sizeof ( int )* 2 ); returnArr[ 0 ] = index1+ 1 ; returnArr[ 1 ] = index2+ 1 ; return returnArr; }

第0次作业

风格不统一 提交于 2020-03-11 07:08:17
问题1: 你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢? 1.选择计算机专业是因为计算机专业十分具有挑战性,且就业前景较好,自己也很感兴趣。2.我现在并不是很了解计算机专业,但我认为我可以同过后期的努力来弥补这缺陷。3.就目前来看,无法与博主相比,但我认为我可以通过我的努力来缩短和博主的差距。 问题2: 你理想的大学应该是什么样子的? 我理想的大学应当有着良好的学风和学习环境,有着较为成熟的教学体系,学生们互帮互助,导员们和蔼可亲,学习氛围较好的样子。 问题3: 对于你未来在IT行业的发展,你有什么样的梦想或者未来想从事什么样的工作?你准备怎样来规划你技术道路,职业道路和社会道路? 1.希望成为一名软件工程师。2.技术道路:学习好计算机专业的知识和技能,并在有空的时候学习一些课外的知识。职业道路:希望成为一名成功的软件工程师,并开发出属于自己的软件。社会道路:希望可以开发更为便捷的软件。 问题4: 大学之前有过编程经历吗?掌握程度如何?你此前听说过C语言吗?对C语言有多少了解?你认为如何才能学好C语言? 1.没有任何编程经历。2.基本没有任何掌握程度。3.知道是一种基础的语言,是计算机专业的基础课程。4.上课认真听课,课下多进行实践,不会的虚心请教导员。 来源: https://www.cnblogs.com/1999-cyc/p/7533314.html

c语言输出语句

旧巷老猫 提交于 2020-03-10 20:50:22
printf("%nd"); 即以十进制输出n位,若不足则左边补0,若超出则全部输出; printf("%3d"); 即以十进制靠右输出三位,不足用空格补充; printf("%-3d"); 即以十进制靠左输出三位,不足用空格补充; %u 无符号位十进制即(0~65535); printf函数若超出限定位数则输出方式按照原字符从左到右逐位全部输出; scanf中 %*d 即跳过本次输入 printf中 %*d 即本次输出是可变字符 scanf输入对应格式是scanf语句什么格式输入就是什么格式,不能自己决定 main() { int c; c=getchar();   //输入A输出为41 printf("%x");  //因为计算机字符以ascii码存入,A的ascii是65(十进制), }        以%x(即十六进制输出)即65转换为16进制输出 为 41; 来源: https://www.cnblogs.com/old-horse/p/12458365.html

C语言数组名代表首地址

情到浓时终转凉″ 提交于 2020-03-10 20:34:40
#include <stdio.h> int main () { /* 带有 5 个元素的整型数组 */ double balance[5] = {1000.0, 2.0, 3.4, 17.0, 50.0}; double *p; int i; p = balance; /* 输出数组中每个元素的值 */ printf( "使用指针的数组值\n"); for ( i = 0; i < 5; i++ ) { printf("*(p + %d) : %f\n", i, *(p + i) ); } printf( "使用 balance 作为地址的数组值\n"); for ( i = 0; i < 5; i++ ) { printf("*(balance + %d) : %f\n", i, *(balance + i) ); } return 0; } double balance[5] = {1000.0, 2.0, 3.4, 17.0, 50.0}; printf("%d\n",balance); //代表地址 printf("%f\n",*balance); printf("%f",*(balance+1)); 来源: CSDN 作者: 张汝祥 链接: https://blog.csdn.net/weixin_42544051/article/details/104774389