char

函数指针和指针函数的区别

我与影子孤独终老i 提交于 2020-03-04 06:14:08
一、【 函数指针 】 在程序运行中,函数代码是程序的算法指令部分,它们和数组一样也占用存储空间,都有相应的地址。可以使用 指针变量 指向数组的首地址,也可以使用 指针变量 指向函数代码的首地址,指向函数代码首地址的 指针变量 称为 函数指针 。 1、函数指针定义 函数类型(*指针变量名)(形参列表); “函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少,后面的“形参列表”表示指针变量指向的函数所带的参数列表。 例如: int (*f)(int x); double (*ptr)(double x); 在定义函数指针时请注意: 函数指针和它指向的函数的参数个数和类型都应该是—致的 ; 函数指针的类型和函数的返回值类型也必须是一致的。 2、函数指针的赋值 int func(int x); /* 声明一个函数 */ int (*f) (int x); /* 声明一个函数指针 */ f=func; /* 将func函数的首地址赋给指针f */ 赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。 二、【 指针函数 】 一个函数不仅可以带回一个 整型数据 的值,字符类型值和实型类型的值,还可以带回指针类型的数据,使其指向某个地址单元。 返回指针的函数,一般定义格式为:

两种KMP题+KMP模版整理

那年仲夏 提交于 2020-03-04 04:35:27
最近稍微看了下KMP,不是很懂他们大神的A题姿势,但是模版总该还是要去学的。 其中next数组的求法有两处区别。 第一种:求主串中模式串的个数。HDU2087 剪花布条和HDU4847 Wow! Such Doge!。这两道都比较水可以暴力string::find函数过, 第一个代码: #include<iostream> #include<algorithm> #include<cstdlib> #include<sstream> #include<cstring> #include<cstdio> #include<string> #include<deque> #include<cmath> #include<queue> #include<set> #include<map> using namespace std; typedef long long LL; int nextval[101010]; void getnext(char s[],int next[]) { int j=0,k=next[0]=-1; int len=strlen(s); while (j<len-1)  // { if(k==-1||s[k]==s[j]) { j++; k++; next[j]=next[k];  // } else k=next[k]; } } int sea(char

LeetCode 面试题05. 替换空格

核能气质少年 提交于 2020-03-04 00:05:09
题目链接: https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof/ 请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 示例 1: 输入:s = "We are happy." 输出:"We%20are%20happy." 限制: 0 <= s 的长度 <= 10000 1 char* replaceSpace(char* s){ 2 int len=strlen(s); 3 int i,j=0,cnt=0; 4 for(i=0;i<len;i++){ 5 if(s[i]==' ') cnt++; 6 } 7 char *ns=(char *)malloc(sizeof(char)*(len+3*(cnt+1))); 8 for(i=0;i<len;i++){ 9 if(s[i]!=' '){ 10 ns[j++]=s[i]; 11 }else{ 12 ns[j++]='%'; 13 ns[j++]='2'; 14 ns[j++]='0'; 15 } 16 } 17 ns[j]='\0'; 18 return ns; 19 } 来源: https://www.cnblogs.com/shixinzei/p/12405626.html

java面试题

青春壹個敷衍的年華 提交于 2020-03-03 19:25:13
1.char类型是否可以存储一个汉字? 在c语言中,char类型占一个字节,而汉字占两个字节,所以不能存储。在java语言中,char类型占两个字节,而java默认采用Unicode码是16位,所以一个Unicode码占两个字节,java中无论汉字还是英文都是用Unicode编码来表达的,所以可以存储一个汉字。 char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,所以,char型变量中可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。 一个字符的 Unicode 编码是确定的。但是在实际传输过程中,由于不同系统平台的设计不一定一致,以及出于节省空间的目的,对 Unicode 编码的实现方式有所不同。Unicode 的实现方式称为Unicode转换格式(Unicode Translation Format,简称为 UTF)。 Unicode编码占用两个字节,char类型的变量也是占用两个字节。 2.缓存用的什么?redis的数据结构?哪个数据结构是除了kay-value有别的存储方式? https://www.cnblogs.com/haoprogrammer/p/11065461.html 3.mysql 如何给SQL添加索引 https://www.cnblogs

内存对齐(转载)

依然范特西╮ 提交于 2020-03-03 19:10:56
目录 内存对齐指令 内存对齐的三条规则 另外还有两个需要注意的点: 下面开始举栗子说明 字节对齐的原因: C/C++中内存对齐问题的一些理解,转载于zhihu 内存管理是C/C++编程非常重要的一部分内容,熟悉C/C++中一些常见数据结构和数据类型的内存分布情况,可以很大程度上降低了coding过程中内存泄漏和越界等比较严重的内存问题,下面主要讨论一下结构体(类中同样存在内存对齐,内存对齐会复杂一些,涉及到虚表等问题,后面介绍类的时候会提到)中的内存对齐问题。 如有侵权,请联系删除,如有错误,欢迎大家指正,谢谢 内存对齐指令 一般来说,内存对齐过程对coding者来说是透明的,是由编译器控制完成的 如对内存对齐有明确要求,可用#pragma pack(n)指定,以n和结构体中最长数据成员长度中较小者为有效值 如未明确指定时,以结构体中最长的数据成员长度作为内存对齐的有效值 以下如没有特殊说明,均视为情况3(未明确指定)计算 内存对齐的三条规则 数据成员对齐规则,结构体(struct)(或联合(union))的数据成员,第一个数据成员存放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员大小或者成员的子成员(只要该成员有子成员,比如数组、结构体等)大小的整数倍开始(如:int 在 64bit 目标平台下占用 4Byte,则要从4的整数倍地址开始存储) 结构体作为成员

编写函数:void delch(char *str, char c),实现删除str字符串中出现所有指定字符。

南楼画角 提交于 2020-03-03 18:39:21
# include <stdio.h> void delch ( char * str , char c ) { char * p = str ; while ( * str ) { if ( * str != c ) { * p ++ = * str ; } str ++ ; } * p = '\0' ; } void main ( ) { char s1 [ 100 ] = "AABCD123ABCD123ABCDA" ; char c = 'A' ; delch ( s1 , c ) ; puts ( s1 ) ; } 来源: CSDN 作者: 轻松的小希 链接: https://blog.csdn.net/qq_38490457/article/details/104633298

位运算符和赋值运算符

浪尽此生 提交于 2020-03-03 18:17:47
位运算符 位运算只能对整数进行,可以是整数型变量也可以是被识别为整数类型的字面量。位运算是对该整数实际存储的二进制串的二进制位进行操作,可以进行6种位运算: 运算符 作用 & 按位与 | 按位或 ^ 按位异或 ~ 按位取反 << 左移 >> 右移 位运算都不改变操作数本身的值,而是位运算表达式本身的值为进行位运算之后的值,例如: char a = 0 B00101101 ; char b = 0 B10100110 ; char c = a & b ; // c == 0B00100100 char d = a | b ; // d == 0B10101111 char e = a ^ b ; // e == 0B00100100 char f = ~ a ; // f == 0B11010010 char g = a << 2 ; // g == 0B10110100,低位补0 char h = a >> 2 ; // h == 0B00001011,高位补0 char gg = b << 2 ; // gg == 0B10011000,低位补0 char hh = b >> 2 ; // hh == 0B11101001,高位补1 左移运算,低位一定补0。右移运算,如果是signed类型则补符号位,unsigned类型则补0,例如: unsigned char b = 0

C/C++-014-get成员函数的使用

我的未来我决定 提交于 2020-03-03 17:33:43
C/C+±014-get成员函数的使用-2020-3-3 //get成员函数的使用 # include <iostream> using namespace std ; int main ( ) { char c ; c = cin . get ( ) ; cout << "c:" << c << endl ; cout << "ASCII:" << ( int ) c << endl ; return 0 ; } t c : t ASCII : 116 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Process exited with return value 0 Press any key to continue . . . 来源: CSDN 作者: c l o u d 链接: https://blog.csdn.net/weixin_41096569/article/details/104631272

大端和小端(big endian little endian)

。_饼干妹妹 提交于 2020-03-03 15:12:20
一、大端和小端的问题 对于整型、长整型等数据类型,Big endian 认为第一个字节是最高位字节(按照从低地址到高地址的顺序存放数据的高位字节到低位字节);而 Little endian 则相反,它认为第一个字节是最低位字节(按照从低地址到高地址的顺序存放据的低位字节到高位字节)。 例如,假设从内存地址 0x0000 开始有以下数据: 0x0000 0x0001 0x0002 0x0003 0x12 0x34 0xab 0xcd 如果我们去读取一个地址为 0x0000 的四个字节变量,若字节序为big-endian,则读出结果为0x1234abcd;若字节序为little-endian,则读出结果为0xcdab3412。 如果我们将0x1234abcd 写入到以 0x0000 开始的内存中,则Little endian 和 Big endian 模式的存放结果如下: 地址 0x0000 0x0001 0x0002 0x0003 big-endian 0x12 0x34 0xab 0xcd little-endian 0xcd 0xab 0x34 0x12 一般来说,x86 系列 CPU 都是 little-endian 的字节序,PowerPC 通常是 big-endian,网络字节顺序也是 big-endian还有的CPU 能通过跳线来设置 CPU 工作于 Little

大端和小端(Big endian and Little endian)

心已入冬 提交于 2020-03-03 15:11:14
一、大端和小端的问题 对于整型、长整型等数据类型,Big endian 认为第一个字节是最高位字节(按照从低地址到高地址的顺序存放数据的高位字节到低位字节);而 Little endian 则相反,它认为第一个字节是最低位字节(按照从低地址到高地址的顺序存放据的低位字节到高位字节)。 例如,假设从内存地址 0x0000 开始有以下数据: 0x0000 0x0001 0x0002 0x0003 0x12 0x34 0xab 0xcd 如果我们去读取一个地址为 0x0000 的四个字节变量,若字节序为big-endian,则读出结果为0x1234abcd;若字节序为little-endian,则读出结果为0xcdab3412。 如果我们将0x1234abcd 写入到以 0x0000 开始的内存中,则Little endian 和 Big endian 模式的存放结果如下: 地址 0x0000 0x0001 0x0002 0x0003 big-endian 0x12 0x34 0xab 0xcd little-endian 0xcd 0xab 0x34 0x12 一般来说,x86 系列 CPU 都是 little-endian 的字节序,PowerPC 通常是 big-endian,网络字节顺序也是 big-endian还有的CPU 能通过跳线来设置 CPU 工作于 Little