c语言
分享常见c语言坑
SkyInTheLimit
小辣鸡一枚,大佬勿喷
展开
-
关于c/c++指针改变变量地址小坑(指针的指针)
#include "stdio.h" #include "stdlib.h" #include <iostream>using namespace std;int change(int *n,int *m){ m = n;} int change2(int **n,int **m){ *m = *n;} int main(void){ int a = 1,b = 2; int *c = &a,*d = &b; cout <&l.原创 2021-08-17 17:19:29 · 536 阅读 · 0 评论 -
c++关于指针或者数组作为函数参数时的坑
直接放代码吧,主要还是要理解直接创建的数组空间和先创建指针后面再创建空间的区别#include "stdio.h" #include "stdlib.h" #include <iostream>using namespace std;int getNum(int **arr);int getNum2(int arr[][20]);int getNum3(int *arr);int getNum4(int arr[]);int getNum5(int *arr[20])原创 2021-08-11 22:34:23 · 135 阅读 · 0 评论 -
关于数组作为函数参数时的size
在c语言里,如果函数参数是数组类型,那么c语言会自动将该形参变指向传入的那个数组的指针,因此在函数内部调用sizeof的到的不是传入的数组大小,而是作为datatype指针的大小:原创 2020-12-26 18:50:31 · 475 阅读 · 1 评论 -
char*和char[]的区别
char*指的是一个指向储存区的指针,其指针指向的值不能改变运行:char[]则会自动储存类型的变量,会自动拷贝一份值到栈中,因此修改char[]的变量是可以的:原创 2020-12-25 18:51:42 · 267 阅读 · 0 评论 -
关于c语言在循环赋值字符时出现乱码情况
c语言有个很奇怪的情况,有时候我们使用循环给一个新的字符数组赋值时打印出来的字符串是乱码,明明赋值都没有错:但是运行起来是这样的:当循环次数大于等于3时:最后经过测试发现:当循环小于等于3的次数时,循环赋值字符数组并不会给字符数组的末尾加上’\0’,才会导致这样的情况,解决这种问题也很简单,就是当字符数组需要赋值的字符个数小于3时在字符数组的末尾加上’\0’即可,如:...原创 2020-12-24 22:40:54 · 1413 阅读 · 0 评论 -
c语言:队列的链式存储结构
# include <stdio.h># include <stdlib.h># define DATATYPE int typedef struct node{ DATATYPE data; struct node *next;}linkqueue;typedef struct{ linkqueue *front,*rear; int len; }LINKQUEUE;void init_linkqueue(LINKQUEUE *Lq){ linkqu原创 2020-12-22 09:46:35 · 182 阅读 · 0 评论 -
c语言:队列的顺序存储实现
# include <stdio.h># include <stdlib.h># define MAXSIZE 11# define DATATYPE int typedef struct{ DATATYPE data[MAXSIZE]; int rear,front;}QUEUE;void init_queue(QUEUE *q){ q->front = q->rear = 0;}int isEmpty(QUEUE *q){ int n;原创 2020-12-21 17:53:24 · 164 阅读 · 0 评论 -
c语言:利用栈特性实现判断字符串是否中心对称
# include <stdio.h># include <stdlib.h># define MAXSIZE 10# define DATATYPE inttypedef struct node{ DATATYPE data[MAXSIZE]; int top;}SEQSTACK;void init_stack(SEQSTACK *S){ S->top = -1;}void stack_push(SEQSTACK *S,DATATYPE n){原创 2020-12-20 23:17:48 · 2996 阅读 · 1 评论 -
c语言:栈的链式存储结构
# include <stdio.h># include <stdlib.h>typedef struct node{ int data; struct node *next;}stackNode;typedef struct{ stackNode *stackTop;}LINKSTACK;//采用两个结构体可以避免使用**的场景,并且后期方便管理void init_linkStack(LINKSTACK *linkstack){ linkstack-&g原创 2020-12-20 18:32:29 · 119 阅读 · 0 评论 -
栈的顺序存储
# include <stdio.h># include <stdlib.h># define MAXSIZE 10typedef struct node{ int data[MAXSIZE]; int top;}SEQSTACK;void init_stack(SEQSTACK *S){ S->top = -1;}void stack_push(SEQSTACK *S,int n){ if(S->top==MAXSIZE-1){ pri原创 2020-12-20 15:29:28 · 191 阅读 · 1 评论 -
c语言循环链表实现约瑟夫环
#include <stdio.h>#include <stdlib.h> typedef struct node{ int data; struct node *next;}LINKLIST;LINKLIST *initList(int n){// 创建一个循环链表 ,赋予的值分别为1,2,3,4.... LINKLIST *head = (LINKLIST*)malloc(sizeof(LINKLIST)); LINKLIST *p = head; he原创 2020-12-19 18:14:46 · 397 阅读 · 1 评论 -
关于c语言指针中传参不改变数据问题
在c语言里面我们有时候会出现如下情况:明明传入的形参是指针,但是在函数改变指针的指向后但是数据却不会发生改变,这个很有可能是我们忽略了在函数中我们是否使用了局部参数的地址(该地址在函数结束后再次调用其他函数时会被回收),如下:#include <stdio.h>#include <stdlib.h> typedef struct test{ int a; int b;}TEST;void change(TEST *t){// test1是局部变量,会被回收原创 2020-11-24 19:01:58 · 2218 阅读 · 0 评论 -
c语言malloc和free函数
int mallocSize(){ void *p; int cnt = 0; while((p = malloc(100*1024*1024)))//malloc分配内存空间,返回void指针,若分配失败则返回NULL { cnt++; } printf("成功分配了%d00MB的空间",cnt); free(p); //free函数:释放malloc过来的内存(赋值的不行,例如*p = &i的内存不能释放;先malloc后来p++后也不能释放了,因为改变了p的指向;无值的指原创 2020-11-13 18:36:44 · 190 阅读 · 0 评论 -
c语言指针与const的关系
c语言指针与const的关系下面展示一些 内联代码片。#include <stdio.h>int main(){ int i1 =1; int i2 = 10; int j = 111; //1、不能修改*p1的值(p1指向的值),但是可以修改p1的指向以及i1自身的值 const int *p1 = &i1;//这种写法等同于int const *p1 = &i1; // *p1 = 10;//error *p1++;//ok(修改地址指向,注意运算原创 2020-11-11 16:10:51 · 102 阅读 · 0 评论