指针

c语言 关键字之typedef 详解

本秂侑毒 提交于 2020-03-03 06:34:01
 在C语言中有一个typedef关键字,其用来定义用户自定义类型。当然,并不是真的创造了一种数据类型,而是给已有的或者符合型的以及复杂的数据类型取一个我们自己更容易理解的别名。总之,可以使用typedef关键字定义一个我们自己的类型名称。   那么,究竟如何定义,又有哪些情况下可已使用呢?接下来我们就对它的几种用法进行说明: (1)基本数据类型定义   有些时候,我们会使用typedef关键字对一些基本数据类型进行重新定义。例如我们使用标准整数的数据类型uint8_t和uint16_t等时,其实他们的定义如下:   typedef unsigned char uint8_t; //无符号8位数   typedef signed char int8_t; //有符号8位数   typedef unsigned int uint16_t; //无符号16位数   typedef signed int int16_t; //有符号16位数   typedef unsigned long uint32_t; //无符号32位数   typedef signed long int32_t; //有符号32位数   很显然就是使用了typedef关键字给既有数据类型分配了一个别名。当我们使用uint8_t时,就和使用unsigned char是一样的。如我们声明uint8_t var时

C基础学习笔记

柔情痞子 提交于 2020-03-03 05:31:43
C语言基本数据类型 char 1字节(不能表示汉字) short 2字节 int 4字节 long 4字节(很长的数字可以用longlong) float 4字节 double 8字节 signed (只能用来修饰整型) 整型默认是为signed unsigned (只能用来修饰整型) void (不能直接定义变量,但是可以定义一个指针) void* 可以指向任意一个对象 注意: C语言是没有byte和boolean类型的(0表示false,非0表示true) 【字符串】申明:char* str = “你好,C” 指针操作 一级指针变量声明:int* pointer; double* d_pointer; 二级指针变量声明:int** pointer; (只能用来保存一级指针变量的地址,多级指针以此类推) 取变量指针值(&):int* pointer = &i; 修改指针变量所指向的内存值:*pointer = 123; 函数返回多个值可以通过指针来实现(就是采用引用传递) 字符串申明:char* str = “你好,C” (注意在printf时,取变量值不能加 *str,直接使用str) 指针变量做加1加2这样的操作,是将指针值挪动n个字节(取决于指针变量的类型所占的字节数) 若函数的参数为指针变量,且在函数内要修改该指针变量的地址值,那么函数的参数要申明为二级指针

第三十天

寵の児 提交于 2020-03-03 02:22:20
f返回的值是指针 格式 类型名 *函数名(参数表列); 例如 指针函数是指带指针的函数,就是函数 函数指针是指指向函数的指针,因此这个是指针变量 一个数组,若其元素均为指针类型数据,称为指针数组,也就是说,指针数组中的每一个元素都相当于一个指针变量,一维指针数组的定义形式为 类型名 数组名[数组长度]; 例如 int *name[4]; int i; 定义整形变量i; int *p; p为指向整形数据的指针变量 int a[n]; 定义整形数组a,他有n个元素 int *p[n]; 定义指针数组p,它由n个指向整形数据的指针元素组成 int (*p)[n]; p为指向含你个元素的一维数组的指针变量 int f(); f为带回整形函数值得函数 int *p(); p为带回一个指针的函数,该指针指向执行数据 int **p; p是一个指针变量,它指向一个指向整形数据的指针变量 指针变量可以有空值 p=null; 指针变量可以相减 如果两个指针变量都指向同一个数组中的元素,则两个指针变量值之差是两个指针之间的元素个数 若;两个指针指向同一个数组的元素,则可以进行比较,指向前面的元素的指针变量“小于”指向后面元素的指针变量 void作用 对函数返回的限定 对函数参数的限定 例如void abc(void) 还可以加一种void指针:不指定它是指向哪一种类型数据的指针变量 仅仅是存地址

函数指针

跟風遠走 提交于 2020-03-03 00:21:43
函数指针 函数指针指向的是函数而非对象。和其他指针一样,函数指针指向某种特定类型。函数的类型由它的返回类型和形参类型共同决定,与函数名无关。例如: //比较两个string对象的长度 bool lengthCompare(const string&,const string&); 该函数的类型是bool(const string&,const string&).要想声明一个可以指向该函数的指针,只需要用指针替换函数名即可: //pf 指向一个函数,该函数的参数是两个const string的引用,返回值是bool类型 bool (*pf)(const string &,const string &); //未初始化 从我们声明的名字开始观察,pf前面有个*,因此pf是指针;右侧是形参列表,表示pf指向的是函数;再观察左侧,发现函数的返回类型是布尔值。因此,pf就是一个指向函数的指针,其中该函数的参数是两个const string的引用,返回值是bool类型。 注意:*pf两端的括号必不可少,如果不写这对括号,则pf是一个返回值为bool指针的函数: //声明一个名为pf函数,该函数返回bool* bool *pf(const string&,const strng&); 使用函数指针 当我们把函数名作为一个值使用时,该函数自动地转换成指针。例如

C风格字符串

大城市里の小女人 提交于 2020-03-02 21:08:55
尽管C++支持C风格字符串,但在C++程序中最好还是不要使用它们。这是因为C风格字符串不仅使用起来不太方便,而且极易引发程序漏洞,是诸多安全问题的根本原因。 字符串字面值是一种通用结构的实例,这种结构即是C++由C继承而来的C风格字符串。C风格字符串不是一种类型,而是为了表达和使用字符串而形成的一种约定俗成的写法。按此习惯书写的字符串存放在字符数组中并以空字符串结束。以空字符结束的意思是在字符串最后一个字符后面跟着一个空字符('\0')。一般利用指针来操作这些字符串。 C标准库String函数 下表列出了C语言标准库提供的一组函数,这些函数可用于操作C风格字符串,它们定义在出string头文件中,出string是C语言头文件string.h的C++版本。 C风格字符串的函数 strlen(p)      返回p的长度,空字符不计算在内 strcmp(p1,p2) 比较p1和p2的相等性。如果p1==p2,返回0;如果p1>p2,返回一个正值;如果p1<p2,则返回一个负值 strcat(p1,p2)    将p2附加到p1之后,返回p1 strcpy(p1,p2)    将p2拷贝给p1,返回p1 传入此类函数的指针必须指向 以空字符作为结束的数组 : char ca[]={'c','+','+'}; //不以空字符结束 cout<<strlen(ca)<<endl; //严重错误

普天C++笔试题

痞子三分冷 提交于 2020-03-02 16:43:51
1.实现双向链表删除一个节点P,在节点P后插入一个节点,写出这两个函数; 答: //假设线性表的双向链表存储结构 typedef struct DulNode{ struct DulNode *prior; //前驱指针 ElemType data; //数据 struct DulNode *next; //后继指针 }DulNode,*DuLinkList; //删除操作 Status ListDelete_DuL(DuLinkList &L,int i,ElemType &e) { if(!(p=GetElemP_DuL(L,i))) //此处得到i位置的节点指针,如果有需要也得写出具体函数实现 return ERROR; e=p->data; p->prior->next=p->next; p->next->prior=p->pror; free(p); return OK; } //插入操作 Status ListInsert_DuL(DuLinkList &L,int i,ElemType &e) { if(!(p=GetElemP_DuL(L,i))) return ERROR; if(!(s=(DuLinkList)malloc(sizeof(DuLNode)))) return ERROR; s->data=e; s->prior=p->prior; p-

VS常用类型及其指针内存

梦想与她 提交于 2020-03-02 15:14:40
int main ( ) { cout << sizeof ( char ) << endl ; cout << sizeof ( char * ) << endl ; cout << sizeof ( int ) << endl ; cout << sizeof ( int * ) << endl ; cout << sizeof ( short ) << endl ; cout << sizeof ( short * ) << endl ; cout << sizeof ( long ) << endl ; cout << sizeof ( long * ) << endl ; cout << sizeof ( double ) << endl ; cout << sizeof ( double * ) << endl ; cout << sizeof ( float ) << endl ; cout << sizeof ( float * ) << endl ; } 输出 1 4 4 4 2 4 4 4 8 4 4 4 来源: CSDN 作者: 苞米地里捉小鸡 链接: https://blog.csdn.net/weixin_42709632/article/details/104610853

(1)学习记录 —— C++基础入门

大城市里の小女人 提交于 2020-03-02 13:58:51
文章目录 C++基础入门 1 C++初识 1.1 第一个C++程序 1.1.1 创建项目 1.1.2 创建文件 1.1.3 编写代码 1.1.4 运行程序 1.2 注释 1.3 变量 1.4 常量 1.5 关键字 1.6 标识符命名规则 2 数据类型 2.1 整型 2.2 sizeof关键字 2.3 实型(浮点型) 2.4 字符型 2.5 转义字符 2.6 字符串型 2.7 布尔类型 bool 2.8 数据的输入 3 运算符 3.1 算术运算符 3.2 赋值运算符 3.3 比较运算符 3.4 逻辑运算符 4 程序流程结构 4.1 选择结构 4.1.1 if语句 4.1.2 三目运算符 4.1.3 switch语句 4.2 循环结构 4.2.1 while循环语句 4.2.2 do...while循环语句 4.2.3 for循环语句 4.2.4 嵌套循环 4.3 跳转语句 4.3.1 break语句 4.3.2 continue语句 4.3.3 goto语句 5 数组 5.1 概述 5.2 一维数组 5.2.1 一维数组定义方式 5.2.2 一维数组数组名 5.2.3 冒泡排序 5.3 二维数组 5.3.1 二维数组定义方式 5.3.2 二维数组数组名 **5.3.3 二维数组应用案例** 6 函数 6.1 概述 6.2 函数的定义 6.3 函数的调用 6.4 值传递 **6.5

C++中四种强制类型转换区别详解

情到浓时终转凉″ 提交于 2020-03-02 13:22:19
 C++即支持C风格的类型转换,又有自己风格的类型转换。C风格的转换格式很简单,但是有不少缺点的:   1.转换太过随意,可以在任意类型之间转换。你可以把一个指向const对象的指针转换成指向非const对象的指针,把一个指向基类对象的指针转换成一个派生类对象的指针,这些转换之间的差距是非常巨大的,但是传统的C语言风格的类型转换没有区分这些。   2.C风格的转换没有统一的关键字和标示符。对于大型系统,做代码排查时容易遗漏和忽略。   C++风格完美的解决了上面两个问题。1.对类型转换做了细分,提供了四种不同类型转换,以支持不同需求的转换;2.类型转换有了统一的标示符,利于代码排查和检视。下面分别来介绍这四种转换:static_cast、dynamic_cast、const_cast和reinterpre_cast. 一、static_cast转换   1.基本用法:static_cast<type-id> expression   2.使用场景:   a、用于类层次结构中基类和派生类之间指针或引用的转换   上行转换(派生类---->基类)是安全的;   下行转换(基类---->派生类)由于没有动态类型检查,所以是不安全的。   b、用于基本数据类型之间的转换,如把int转换为char,这种带来安全性问题由程序员来保证   c、把空指针转换成目标类型的空指针   d

Leetcode-数组&链表

可紊 提交于 2020-03-02 09:37:52
常见双指针技巧用法,只总结思路,具体边界判定想不清楚的时候稍微画个图就行了 1. 快慢指针判断链表是否含有环、环入口(快慢指针再次相遇即有环;再从头节点和快慢指针的相遇位置同速度向后,相遇点即为环入口)。 2. 快慢指针找链表中点、倒数第k个元素(快指针到达 Null 时慢指针所处位置即为中点;快指针先走k步,然后和慢指针一起同速度向后,快指针到达 Null 时慢指针的位置就是倒数第k个节点)。 3. 左右指针二分查找、在有序数组中找两数之和、反转数组 4. 滑动窗口,典型题包括 #76、#438、#3 76. 最小覆盖子串 https://leetcode-cn.com/problems/minimum-window-substring/ 给你一个字符串 S、一个字符串 T,请在字符串 S 里面找出:包含 T 所有字母的最小子串。 示例: 输入: S = "ADOBECODEBANC", T = "ABC" 输出: "BANC" 说明: 如果 S 中不存这样的子串,则返回空字符串 ""。 如果 S 中存在这样的子串,我们保证它是唯一的答案。 解: 可以用滑动窗口技巧,left 和 right 指针都初始化为0,然后 right 向右滑动直到 s[left, ..., right] 中包括了T串中所有的字符,就得到一个可能的解,再令 left