![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
记录C语言学习
嗒曦
这个作者很懒,什么都没留下…
展开
-
中阶C语言 结构体(typedef用法、多维结构体、指针、内嵌函数、赋值)
中阶C语言 结构体(typedef用法、多维结构体、指针、内嵌函数、赋值)type A:多年工作经验告诉我这种方法最为标准实用,墙裂推荐<span style="color:#000000"><code class="language-c"> <span style="color:#c678dd">typedef</span> <span style="color:#c678dd">struct<...原创 2020-09-12 15:09:04 · 225 阅读 · 0 评论 -
结构体深浅拷贝
1.结构体含有指针,如果两个结构体赋值则只是拷贝指针2.内含指针还需要重新申请内存 typedef struct teacher { char *name; int age; }teacher; teacher t1; t1.name = (char*)malloc(30);//给name动态分配空间 strcpy(t1.name, "liming");//把文字常量区的内容拷贝给t1.name t1.a...原创 2021-06-17 20:03:31 · 252 阅读 · 0 评论 -
二维数组, 二级指针区别
注:为了方便解释,二维数组都按2行3列计算;下面的例子都是亲测有效一、写法及含义1、int a[2][3] = { {2,4,6}, {20,40,60} };:定义了一个行为2,列为3的二维数组,所以sizeof(c)为3*2*4=24字节2、int(*b)[3];:数组指针,指向列有3个的二维数组,因为是指针所以sizeof(b)为4字节(一个指针的大小)3、int*c[2];:指针数组,是一个数组,里面是两个int*类型的指针,所以sizeof(c)为2*4=8字节4、int** d原创 2021-06-17 00:01:31 · 732 阅读 · 0 评论 -
指针数组和二级指针
三、函数调用的形参和实参我们需要注意以下几点:1、内存存储方式不同的不要互为形参和实参,比如上面说的连续存储内存和非连续存储内存,例int a[2][3]不要和int** d互为形参和实参2、以下是比较常用的实参和形参搭配方式实参 所匹配的形参数组的数组charc[8][10];数组指针char(*)[10];指针数组char*c[10]; 指针的指针char**c;指针数组char*c[10]; 不改变char(*c)[10]...原创 2021-06-16 22:23:52 · 56 阅读 · 0 评论 -
栈生长方向
void test(void){ //高地址生长低地址 char num=0; //栈底,高地址 char num1=0; char num2=0; char num3=0; //栈顶,低地址 printf("%p\n",&num); printf("%p\n",&num1); printf("%p\n",&num2); printf("%p\n",&num3); }...原创 2021-06-15 21:43:24 · 137 阅读 · 0 评论 -
常量不能释放内存,常量保存在常量区
char *t=NULL; t=(char *)malloc(50*sizeof(char));// t="ODFKK";// printf("=%s\n",t); // printf("=%p\n",t); //常量// t="SDFS";// printf("=%s\n",t);// printf("=%p\n",t); // printf("=%p\n",(char *)"ODFKK"); //存放地址...原创 2021-06-15 21:42:48 · 98 阅读 · 0 评论 -
内存储存方向,高低,小端
uint32_t pp=0x11223344; char *t=&pp; printf("0x%x\n",*t); printf("0x%x\n",*(t+1));//33// printf("0x%x\n",*t+1);原创 2021-06-15 21:24:44 · 73 阅读 · 0 评论 -
指针移动步长,结构体成员偏移
char *t=NULL; int *t1=NULL; double *t2=NULL; printf("%p\n",t); printf("%p\n",t+1); printf("%d\n",t); printf("%d\n",t+1); //1 printf("%d\n",t1); printf("%d\n",t1+1); //4 printf("%d\n",t2); print...原创 2021-06-15 21:16:07 · 155 阅读 · 0 评论 -
空指针,野指针
空指针可以多次释放,野指针不行原创 2021-06-15 20:30:49 · 88 阅读 · 0 评论 -
字符串常量地址
char *t=NULL; t=(char *)malloc(10*sizeof(char)); t="ODFKK"; printf("=%s\n",t); printf("=%p\n",t); //常量 t="SDFS"; printf("=%s\n",t); printf("=%p\n",t); printf("=%p\n",(char *)"ODFKK"); //存放地址 printf("=...原创 2021-06-15 20:20:05 · 909 阅读 · 0 评论 -
固定地址赋值
char pp=10; char *t=NULL; t=(char *)0x20008671; *(char *)0x20008671=100; printf("=%d\n",*t); *t=200; printf("=%d\n",*t); printf("=%p\n",&pp); printf("=%p\n",t); //存放地址 printf("=%p\n",&...原创 2021-06-15 19:58:44 · 205 阅读 · 0 评论 -
指针简单详解
char pp=10; char *t=NULL; t=&pp; printf("=%p\n",&pp); printf("=%p\n",t); //存放地址 printf("=%p\n",&t); //指针存放的地址原创 2021-06-15 19:52:49 · 93 阅读 · 0 评论 -
C语言——局部变量运用注意以及详解
char Getnum(void){ char p=0; p=5; return p; // OK}//栈区//函数能够返回 静态变量的地址而不能返回局部自动变量的地址char *Getarray(void){ char p[] = "hello world"; return p; // NO}char *Getnum(void){ char p=0; p=5; return &p; // NO}...原创 2021-06-15 19:50:59 · 354 阅读 · 0 评论 -
常量const
char *Getconst(void){ const char p='A'; //局部const 伪常量,全局是常量,只读 //char tab[p]; //不行,伪常量 return &p; //NO}const char pp='A'; //全局是常量,只读char *Getconst2(void){ return &pp; //NO}char *Getpp(void){ char *p="ODFSJ"; ...原创 2021-06-15 19:50:02 · 71 阅读 · 0 评论 -
返回局部变量,const注意
char Getnum(void){ char p=0; p=5; return p; // OK}//栈区//函数能够返回 静态变量的地址而不能返回局部自动变量的地址char *Getarray(void){ char p[] = "hello world"; return p; // NO}char *Getnum(void){ char p=0; p=5; return &p; // NO}......原创 2021-06-10 19:44:48 · 159 阅读 · 0 评论 -
返回地址,局部指针,传入
char Getnum(void){ char p=0; p=5; return p; // OK}//栈区//函数能够返回 静态变量的地址而不能返回局部自动变量的地址char *Getarray(void){ char p[] = "hello world"; return p; // NO}char *Getnum(void){ char p=0; p=5; return &p; // NO}...原创 2021-06-10 00:09:31 · 194 阅读 · 0 评论 -
字符串查找第一次字符出现的位置
char *str_chr(char strDest,char *strSrc){ if((strDest=='\0') && (strSrc ==NULL)) return NULL; while(*strSrc) { if(*strSrc==strDest) return strSrc; strSrc++; } return NULL; ...原创 2021-06-05 00:28:20 · 972 阅读 · 0 评论 -
字符串变比较函数
int str_cmp(char *strDest,char *strSrc){ if((strDest==NULL) && (strSrc ==NULL)) return NULL; while((*strDest == *strSrc) && *strDest && *strSrc) { strDest++; strSrc++; } ...原创 2021-06-04 23:53:38 · 432 阅读 · 0 评论 -
字符串拷贝n个和复制n个
char *str_ncpy(char *strDest, const char *strSrc, int len){ char *address = strDest; int num=0; if((strDest==NULL) && (strSrc ==NULL)) return NULL; while(*strSrc) { ...原创 2021-06-04 23:29:51 · 556 阅读 · 0 评论 -
字符串剪切
char *str_cat_change(char *strDest, const char *strSrc){ char *address = strDest; if((strDest==NULL) && (strSrc ==NULL)) return NULL; strDest=address+strlen(strDest); while(*strSrc) { *strDest+...原创 2021-06-04 23:22:53 · 79 阅读 · 0 评论 -
字符串拷贝函数
char *str_cpy(char *strDest, const char *strSrc){ char *address = strDest; if((strDest==NULL) && (strSrc ==NULL)) return NULL; while(*strSrc) { *strDest++ = *...原创 2021-06-04 23:10:18 · 75 阅读 · 0 评论 -
字符串回文数判断
int str_palind(char *src_str){ char *start=src_str; char *end=start+strlen(src_str)-1; while(start<end) //0 { if(*start!=*end) { return -1; } start++; end--; } return 0;}...原创 2021-06-04 00:24:52 · 62 阅读 · 0 评论 -
字符串逆序
void str_inverted(char *src_str){ char *start=src_str; char *end=start+strlen(src_str)-1; while(start<end) //0 { *start^=*end; *end^=*start; *start^=*end; start++; end--; }}...原创 2021-06-04 00:18:57 · 80 阅读 · 0 评论 -
字符串字符个数计算
int str_len(char *src_str){ int temp_num=0; while(*src_str) //0 src_str { src_str++; temp_num++; } return temp_num;}原创 2021-06-04 00:01:53 · 744 阅读 · 0 评论 -
计算字符串里字字符串的个数
int str_num(char *src_str,char *dec_str){ int temp_num=0; char *p=strstr(src_str,dec_str); while(p) { temp_num++; p+=strlen(dec_str); p=strstr(p,dec_str); } return temp_num;}...原创 2021-06-03 23:30:49 · 166 阅读 · 0 评论 -
字符串
void str_sp12(char *src_str,char *dec_str){ int i=0,j=0; while(dec_str[j]!=0) { if(dec_str[j]!=' ') { src_str[i++]=dec_str[j]; } j++; } src_str[i]=0;}void str_sp(char *src_...原创 2021-06-03 23:17:31 · 67 阅读 · 0 评论 -
字符串拷贝函数
void str_copy12(char *src_str,char *dec_str){ int i=0,j=0; while(dec_str[j]!='\0') { src_str[i++]=dec_str[j++]; } src_str[i]=0;}void str_copy(char *src_str,char *dec_str){ while(*dec_str) { *src_str=*dec_str...原创 2021-06-03 23:12:27 · 118 阅读 · 0 评论 -
传地址三种
void tab23(uint8_t str[9],uint16 len)void tab23(uint8_t str[],uint16 len)void tab23(uint8_t *str,uint16 len)原创 2021-06-03 21:49:03 · 188 阅读 · 0 评论 -
多级指针理解
int a=1;int *p=&a; //一级指针是变量的地址int **pp=&p; //二级指针是一级指针的地址//int **pp=&&a; //无意义,多级指针不能跳跃定义,二级指针必须定义一级指针int ***ppp=&pp;//ppp=&pp; //三级指针//*ppp=pp=&p; //二级指针//**ppp=*pp=p=&a; //一级指针//**...原创 2021-06-02 23:34:50 · 198 阅读 · 0 评论 -
数组移动取地址
uint8_t tab34[11]={1,3,6,5,7,2};uint8_t *temp=&tab34[2];printf("temp=%p\n",&tab34[3]);printf("temp=%p\n",&tab34[3]+1);int tab347[11]={1,3,6,5,7,2};int *temp7=&tab347[2];printf("temp=%p\n",&tab347[3]);printf("temp=%p\n",&tab3原创 2021-06-01 23:45:49 · 138 阅读 · 0 评论 -
指针移动字节数和数组关系
uint8_t tab34[11]={1,3,6,5,7,2};uint8_t *temp=&tab34[2];printf("temp=%p\n",temp+1);printf("temp=%p\n",&tab34[3]);原创 2021-06-01 23:27:51 · 168 阅读 · 0 评论 -
指针和数组对应关系
for(uint8_t i=0;i<sizeof(tab34)/sizeof(tab34[0]);i++) { printf("ta=%d\n",*(tab34+i)); } for(uint8_t i=0;i<sizeof(tab34)/sizeof(tab34[0]);i++) { *(tab34+i)=i; } temp=tab34; for(uint8_t i=0;i<sizeof...原创 2021-06-01 22:55:41 · 429 阅读 · 0 评论 -
二维数组和指针关系
printf("ta=%d\n",tab2[0][0] ); //等效指针 printf("ta=%d\n",*(tab2[0]+0) ); //等效指针原创 2021-06-01 22:32:42 · 87 阅读 · 0 评论 -
二维数组计算行数、首地址
printf("ta=%d\n",sizeof(tab2)); printf("ta=%d\n",sizeof(tab2[0])); //行大小 printf("ta=%d\n",sizeof(tab2[0][0])); printf("ta=%d\n",sizeof(tab2)/sizeof(tab2[0])); //行数 printf("ta=%d\n",sizeof(tab2[0])/sizeof(tab2[0][0]));//列数 ...原创 2021-05-31 22:49:39 · 384 阅读 · 0 评论 -
数组反转逆序
void tab(uint8_t *str,uint16 len){ int temp_num=len-1; for(int i=1;i<len;i++) { int flag=0; for(int j=0;j<temp_num;j++) { if(str[j]>str[j+1]) { str[j]^=str[j+1]; ...原创 2021-05-31 21:54:01 · 163 阅读 · 0 评论 -
冒泡排序算法
void tab(uint8_t *str,uint16 len){ int temp_num=len-1; for(int i=1;i<len;i++) { int flag=0; for(int j=0;j<temp_num;j++) { if(str[j]>str[j+1]) { str[j]^=str[j+1]; ...原创 2021-05-31 21:51:16 · 70 阅读 · 0 评论 -
常量,计算长度,数据类型,指针数组,数组指针,const
1.常量:definde 注意括号(while())2.const 只读,编译器定义有分配内存,声明没有3.sizof是原创 2021-05-28 21:22:37 · 99 阅读 · 0 评论