
C语言
文章平均质量分 69
永不过时的技术
吃数据的猴子
程序人生
展开
-
从数据类型的角度看指针
指针的赋值int* a;a=(int*)1;不管int后有多个*,强制转换时就加几个*char* x;short y;int z;x=(char *)1;y=2;z=3;编译器对声明时的每个变量分配4字节的空间,定义时才给具体的空间。任何类型都可以带 * 加上 * 以后是新的类型。指针类型定义的变量占4字节,不管后有多个*,这个变量存储的数据宽度都是4字节。++或–(不支持*和/)不带类型的变量,++或者-- 都是假1 或者减1带 的++和-- 是根据自身类型的宽度决定的原创 2020-08-14 13:28:54 · 116 阅读 · 0 评论 -
指针操作数组和数组指针
指针倒置原创 2021-07-23 14:15:36 · 318 阅读 · 1 评论 -
哈希桶和溢出桶解决hash冲突
问题描述定义结构体原创 2020-08-25 17:13:58 · 1047 阅读 · 0 评论 -
二级指针做函数参数
下面围绕对指针数组的操作进行说明第一种内存模型#include "stdio.h"#include <stdlib.h>#include <string.h>void printArr(char** arr,int num) { if (arr == NULL)return -1; for (int i = 0; i < num; i++) { printf("%s\n", arr[i]); }}int sortArr(char** arr, int.原创 2020-08-11 22:27:45 · 2370 阅读 · 1 评论 -
C指针与结构体
1.结构体实例声明定义了一个结构体#include <stdio.h>#include <string.h>typedef struct _person {//结构体的声明 char* name; char* title; unsigned int age;}Person;void main() { Person p;//结构体实例声明 p.name = "a";//点表示法访问其字段 p.title = "Manage"; p.age = 12;}原创 2020-07-27 23:42:10 · 281 阅读 · 0 评论 -
C语言字符和字符串的存储
数值在计算机中是以二进制的形式存储的。字符和字符串是先编码后再转化为二进制的形式存储,编码方式如(ASCII码,UTF8)。例如,char x=‘a’,将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到存储单元中。C中字符表示用单引号,字符串表示用双引号,字符串是一段连续的字符。字符字符之间的相减就是ASCII码之间的相减字符整数在内存中的存储在内存中只是存储了2和5的ASCII码的值打印出a和b的值查表得知是2和5的A原创 2020-07-25 11:32:08 · 4006 阅读 · 0 评论 -
图解C语言指针和指针类型是什么
指针就是变量,用来存放地址的变量(存放在指针中的值都当成地址处理)通俗的讲,假设a和p都代表相同类型(如int)的变量,如何让这两个变量在内存中代表相同的地址空间呢?先定义int p,然后p=&a(在p和a的前面加上各自的符号),这个这两个变量就代表一段相同的内存空间。现在这个地址空间存的值是一个int类型(4字节)的数值(10)下面是16进制显示的数值(10转化为16进制是a,16进制每两位代表1字节),根据Cpu大小端模式,读法应该是0x 0000000a只要是个变量都会有地址,那原创 2020-07-24 15:11:06 · 1163 阅读 · 1 评论 -
C语言简单的交换两个数字(通过编译器真正了解指针指针的使用)
指针就是存放某样东西的地址下面是swap函数的作用简单的交换两个数字void swap(int *a,int *b) { int tmp =*a; *a = *b; *b = tmp;}void main() { int x = 2; int y = 3; swap(&x,&y); printf("x:%d\n", x); printf("y:%d\n", y);}通过编译器真正了解指针一开始发现两个变量地址相差了12个位初始化后调用swap函数原创 2020-07-24 00:16:38 · 320 阅读 · 0 评论 -
C—彻底了解结构体struct
struct + 结构体名,代表一个数据类型(类似于int,char……)struct 结构体名{在里面定义成员变量}#include <stdio.h>struct Person{ char name[10]; int age; int height;};int main(){//定义一个结构体变量p1并赋值 struct Person p1{ "a", 10, 150 }; printf("%d\n",p1.age); printf("%d",siz原创 2020-07-19 12:51:36 · 190 阅读 · 0 评论 -
C—函数指针与typedef
函数指针就是存储函数首地址的地址%p 是以16进制的形式输出内存地址。%x 也是以16进制的形式输出内存地址。不过%p的输出字符为8个前2个为00,%x只有6个。函数指针的声明1.先写出目标函数的原型2.将目标函数的函数名改为函数指针变量名3.为*和函数名加括号,指向函数首地址(即函数名)上图是在64位环境下编译的,下图是在x86环境编译的,x86下一个指针4个字节(两个16进制为=1字节)复杂的函数指针#include <stdio.h>void fun(){原创 2020-07-19 10:49:49 · 125 阅读 · 0 评论 -
C语言之回调函数
编程时各个模块(函数)从应用到底层分成多个层,确保所有的函数调用关系是从上(main函数)到下,确保单项依赖,这样上层的模块就更容易被更换回调函数就是将双向依赖改为单项依赖的工具代码实现callback调用参数(就是传进来的函数)不同的方法再如 #include <stdio.h> //返回值(*指针名)(参数列表)typedef int (*callback)(int,int);//回调函数int ADD(callback p, int a, int b){原创 2020-07-17 22:34:22 · 213 阅读 · 0 评论 -
C语言之变量内存体现(VS编译器)
计算机中所有的数据都是以二进制形式表示的,一个字节(byte)=8位(bit),但是内存地址空间是用16进制的数据表示, 如0x8049324,因为十六进制更简短,所以换算的时候一位16进制数可以顶4位2进制数。例如int类型占四个字节,他在计算机中的表示为00000000 00000000 00000000 00000000,2^4=16,16进制是即逢16进1,所以满四位进1,...原创 2020-07-07 14:31:34 · 358 阅读 · 0 评论 -
C语言之内存管理
C语言内存管理一.系统中的堆、栈 和 数据结构堆、栈系统中的堆、栈和数据结构堆、栈不是一个概念。可以说系统中的堆、栈是真实的内存物理区,数据结构中的堆、栈是抽象的数据存储结构。数据结构堆、栈1.栈:实际上就是满足后进先出的性质,是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。2.堆:堆是一种完全二叉树或者近似完全二叉树,完全二叉树是效率很高的数据结...原创 2020-03-22 20:54:34 · 336 阅读 · 0 评论 -
C语言数组之查找
输入某班学生学号及某门课的成绩,任意输入一个学号,查找具有该学号的学生的成绩。顺序查找也称作线性查找法。基本思想:利用循环顺序扫描整个数组,一次将每个元素与待查找的元素进行比较,若找到则停止循环,输出其位置值;若所有的元素都比较后仍为找到,则循环结束,输出未找到。#include <stdio.h>int bansearch(int a[],int n,int x);int ...原创 2019-03-26 18:41:27 · 4788 阅读 · 0 评论 -
C语言数组之排序
输入某门课的成绩,按编程将分数从高到低顺序进行排序输出第一种:采用交换法排序,也称作冒泡排序。基本过程是先将第一个数分别于后面的数一个一个进行比较,若后面的数小,则交换后面这个数和第一个数的位置,否则不交换,一轮比较结束后就求出了一个最小值的数放在了第一位。然后进入第二轮比较,即在其余的数中再按此法求出一个最小的数放在第二个数的位置,再第三次……n个数比较总共需要n-1轮简单实现代码片...原创 2019-03-25 19:56:34 · 15030 阅读 · 0 评论