- 计算机语言学习
- C
- 1. memset 初始化
- 2. sprintf
- 3.memcpy函数
- 4.exit退出函数
- 5. continue与break
- 3.指针与数组
- C++
- 1.输出
- 2.输入
- C# - CTF
- 001. Console . ReadLine ()
- Substring(start_index)
- Assembly
- 位运算
- Python
- 1.数组切片 *** 作基本表达式
- python isalpha()函数
- python find函数
- Unicode编码
- Bytes类型 与 函数 encode()
- hex()函数
- int( )函数
- upper()函数
- Java
- 第一个java程序
- HTML
title: 计算机语言学系Language-Code
date: 2021-12-16 14:01:30
tags: 007-计算机语言学习 C 1. memset 初始化
memset(Buffer, 0, sizeof(Buffer));
memset对Buufer从第[0]开始把数字’ 0’ 复制sizeof(Buffer)个长度给Buffe
注意这里单位长度sizeof(Buffer), 比如一个int 4字节
2. sprintf衔接字符串
sprintf(Buffer, “%s%02X”, Buffer, a[i] ^ b[j]);"%s=Buffer,%02X=a[i] ^ b[j]"
sprintf(str, “%s world!”, “hello”);
memcpy(d, s+11, 6);
表示从 s[11] 字符开始复制6个给
#include
exit(0);
contiune是满足条件不再执行他之后的语句
break 是直接跳出循环,不管它之后有没有东西…
有时候bbreak与continue的作用是一样的
3.指针与数组指针-乱讲
10.1.1地址与指针
指针就是所指向变量的地址,我们要通过调用地址来访问指定内存的储存单元 eg:如房间编号5008指向寝室的4个sb 房间的指针就是门牌号
简而言之,指针就是地址
变量i,指针p
p是i的房间编号,通过p我们知道i里面有啥子鬼
一个int有4字节,char有1字节 eg 1一个房间装4或1个人
10.1.2变量与指针
对变量的存取是通过地址实现的
10.1.3指针变量
类型 * 变量名 专门用来放地址的变量类型,指针变量类型
指针变量的赋值 &x 地址运算符,表示x的房间编号 eg int p=&x 指针运算符, 表示访问指向的房间 eg printf("%d", p); 当赋值运算 p=&x,时 我们可以同时用2者访问同一个房间 房间绝不是简单的一个int型编码,而是指针类型的数字编码 ---->问题,可不可以 *p=8; 注意&*P表示取p指向元素的地址
指针变量的引用
int *p , q 只是表示p是指针,而 q 是 int 变量
10.1.4 指针的加减
int*p,arr[5]
p=arr;
p+i 或者a+i 表示&a[i]数组元素的地址
*(p+i)或者 *(a+i) 表示a[i]数组的元素
指针的递增递减
p++就是指向下一个房间的门牌号
*p++就是 *(p++), 表示指向下一个房间的元素
*p-- 同上;
p–同上;
—>注意 , p++ 后,指针值会发生改变,即门牌号发生了改变,如果还要从头开始访问,要重新回到最初的门牌号
10.2.1一维数组与指针
数组名表示首地址
int *p , arr[7];
p=arr;
p=&arr[0];
10.2.2二维数组与指针
二维数组是一维数组 以直化曲
在a [x] [y] 数组中相关概率的混淆
地址混淆篇
a默认为a [0] [0]的地址, 没有解维
它后面可以跟着2个索引
跟一个索引 a+x 表示 a [x] [0]的地址
跟2个索引 [ * [a+x]+y ] 表示即 a [x] [y]的地址
同上,有…
*a , 此刻已解开1个维,默认a[0] 的地址, 故a[0]也表示 * a的地址 未接索引时默认& a[0] [0] 只能接1个索引, 即 ( *a)[x] 表示& a[0] [x]的地址
同理a[x]表示 未接索引的a[x] [0] 接了索引时( * a [x] ) [y]表示a [x] [y]
&a[4] 也可以接2个索引
( &a[4] ) [x] [y]表示 a[4+x] [y]
只能接1个索引的, +1表示指向写一个邻近的地址
可以接2个索引的,+1表示指向性下一行的地址
元素值混淆篇
表示a[x] [y]元素
*( *(a+x)+y )
*( a[x] + y )
*(&a [x] [y]) 其中 &a 默认&a[0]
*( *(a+x) ) [y]
注意, a[0]已 表示解维, &a[1]中a[0]解维后&又加维 [ * [a+x]+y ] 中,a+x没有解维,只是在一维上运算,要转到二维去加y
10.2.3字符串与指针
疑惑
char s[]={“hello,i am coming”};
char *p=NULL;
p=s;
printf("%sn",p);它会从第一个地址往后一直取
printf("%cn",p);
printf("%cn",++p);
疑惑
char* str=“hello,i am a-xiang”;
//指针地址可以是字符串吗?好比地址是000020x,可以是zfcswdi吗…这可能使地址不连续
printf("%s",str);//它会从开始一直取到末尾
printf("%s",&str[5]);//它会从第6位开始一直取到末尾
10.2.4 字符串数组与指针-指针数组
数组里面放的是指针,本质数组,元素是char指针好比这句话
char* str=“hello,i am a-xiang”,
于是
char *arr[100]={“hello”,"i am ",“a-xiang”};
//直接已arr[i]访问其中的元素
10.3 指向指针的指针–二级指针
类型 ** 指针名字
int ** p;
如何访问它?破壳
int *(*p)
注意啦 *地址运算符是访问所在地址指向的元素
二级指针有个啥用? 可能就是把数据打包吧,就像酒店对房间进行有序化管理的输入输出
10.4 指针变量作为函数参数
脱离不了指针的本质
函数调用时,实参与形参的数据传递方向是单向的, 指针变量作函数也是如此, 调用函数不可能改变实参指针变量的值,但可以改变实参指针所指向变量的值
指针数组
数组字数组,数组里面放地址
int var[] = {10, 100, 200};
int i, *ptr[MAX];
for ( i = 0; i < MAX; i++)
{
ptr[i] = &var[i];
}
for ( i = 0; i < MAX; i++)
{
printf(“Value of var[%d] = %dn”, i, *ptr[i] );
} 要ptr输出得赋地址和给它
字符串指针数组,数组里面放字符串,
直接当数组用,不过它还附带地址
char str[]={“hello”,“a i am “,“a-xiang”};
printf(”%s”,str[2]); 不用赋地址,直接访问,还不用运算符
数组指针,指针里面放元素,不太了解它
int (*a)[3];
估计a会指向应该二维数组
这样理解它,它就是一个数组
int (*a)[3]表示a[0][0]之后的3个元素相应的地址
(*a)[3]表示a[0][3]首行第3个的地址
a后面会加减,就可以实现数组地址的遍历
小括号让a与 * 结合,表示 a 是一个指针,这个指针指向了一个数组,数组中有 3 个元素,每一个元素的类型是 int 型。
10.5 返回指针值的函数
int f(int x, int y)
{
intp;
最后得出结果result;
把结果地址给函数来返回;
p=&result;
return p;
}
10.6指针数组做main函数的参数
main函数称为主函数,是所有程序的运行入口
C++1.头文件
#include
using namespace std;
i input o output stream 流
cout << dx; std::__cxx11::basic_string 这些函数一般可以实现指针的传递,动态内存分配… 如何分析一个陌生的东西,还比 __gmpz_init_set_str(v5, “65537”, 10LL); Console.ReadLine() 数组声明与引用 int [] xxxx = new int[5] { 1,2,3,4,5}; 检索子字符串。 子字符串在指定的字符位置 start_index 开始并一直到该字符串的末尾。 xxxx.Substring(start_index, scan_len) 参数一:起始位置(从start_index开始) 参数二:指定检索长度scan_len 按位运算符 ~取反 >>右移 <<左移 & 按位 与 (且) A & B 对应的2数转换位2进制, 如果对应的位都为1, 那么结果就是1, 如果任意一个位是0 则结果就是0 | 运算符 (或) 如果对应的位中任一个 *** 作数为1 那么结果就是1 有真即真 ^按位异或 (非) 2数相同,结果产生0 2数不同,结果就产生1 0 1 0 0 0 0 0 1 ^ 0 1 0 1 1 0 1 0 移位运算符把位按指定的值向左或向右移动 右>> 左<< 移动超过的位将丢失,而空出的位则补0 0 1 0 0 0 0 1 1 b (67) 向左移动两位67<<2将变成 0 0 0 0 1 1 0 0 b (12) 乘法<< x<<1=x * 2= x<<2=x * 2 * 2 x<<3=x * 2 * 2 *2 除法>> x>>1 = x/2 x>>2=x/2/2 x>>3=x/2/2/2 取整运算 任何小数 把它 >> 0 可以取整 如3.14159 >> 0 = 3; arr[ start : end : step ] end 不是右,是结束 当没有 符号 : 时 表示输出 arr [x] 当只有一个符号 : 默认 step = 1 step = 正号, 输出为正向,从start_index -->end_index 左到右 step = 负号,输出为负方向, 从end_index–>start_index 右到左 a[:] #从左往右 a[1:9:]–>默认step=1,如果a[1:9:-1]输出[空] print str.isalpha(); 如果出现非字母的东西,就返回’假’ 只有全是字母才返回’真’ txt = “abcdefabcde’” x = txt.find(“c”,5,9)#8 print(x) y = txt.find(“c”)#2 print(y) 他也叫万国码… 所以虽然unicode很好,但是很浪费空间,于是就把unicode给细化一下 utf-8,就一个byte的类型,你的数据再多,我都一个byte一个byet的存放 计算机要识别你的字符串要经过一下数据类型的转化 Unicode如和实现? 下面是python的运行实例 对于String,Bytes,number,他们是不可变的类型,就像常量.不可更改//什么鬼? 除了utf-8的万国码外还有很多个性码… 可以将Bytes转化为16进制…人后就不知道了 将字符串都大写 第一课-入门 public class Dqx_Class { } 一个程序只能有一个public,并且文件名要与Class定义的文件名相同 好比 int char, class定义一个类,这个类就好比你的肢体,而你的人就是那个程序… 一个 .java可以有多个class, 好比你人有好多器官 name_xx是公开类的名字,要与文件名字一样 …我现在不知道 void 空的 main 函数的入口 7.string [ ] 给参数列的一个表,来装参数? 定义字符串 一些cmd *** 作 javac code_name_xxx.Java java class_name_xxx del *class 欢迎分享,转载请注明来源:内存溢出
cout<<“Please input an int number:”<
std::__cxx11::basic_string
像这些C++函数,你只需要看最后一句就可以了!最后一句就是它调用的函数
东西,他确实是一个函数,点进去看,啥也没有,其实这更加确定了它是一个系统函数!系统函数就去百度呗,然后看它是什么作用
会等待直到用户按下回车,一次读入一行。
new int[5] 只是初始话数组的关键字
002. Substring函数
子字符串从指定的字符位置start_index开始, 且检索具有指定的长度scan_len。
& 按位与 |按位或
& 运算符(且)
| 跟 & 的区别在于
(同则0,不同则1)
产生 0 0 0 1 1 0 1 1
start不是左,是开始
a[::] -->step=1正向
a[::-1]–>step= -1 逆序
a[6:] <–表示从a[6]~a[9]
a[:6] <–表示a[1]-a[5]
a[:6:-1] <-- 表示逆向a[9]~a[5]
a[6::-1] <–表示逆向a[6]~a[0]
a[-1:-6:]输出空[],默认step=1与实际-1矛盾
a[-1:-6:-1] <—a[9]-a[5]
a[-6:]
a[-6::-1]
另外在c语言里面可以有’a’==97,在python就不可以
检测字符串里面是否有字母.
字符串检索出现的位置,find(str,begin检索位置,end检索位置)
针对all国家语言的一种编码方式
ASCII就是一种
编码的方式…显示效果相同,但是所占空间的大小却不一样
好比
Bytes类型 与 函数 encode()
utf-16,空间就要大写,可能装一个byte还有剩的空间
utf-32 …
String–>Bytes–>计算机直接使用
Python的内置函数encode()可以将你的字符串变成计算机能够识别的中间语言
如果用utf-8来编码"中"
先来一个表
然后’中’的Unicode是 u4e 2d
它的大小是07FF<20013
u 4e 2d
的二进制
分为3段放进去
然后就balabala…
print("这里藏着一个打印Bytes的函数")
def Str_To_Bytes(x):
return "dqx_yyds-->b'%s'"% ''.join('\x%.2x' % y for y in x)
print("n这前2种写法一样n")
#"定义Bytes类型,可以直接定义或者转化encode"
str1=bytes('DQx','utf-8')
str2='DengQuxiang'.encode('utf-8')
print("n编码n他不会以16进制的形式展现,原字符打印,但它的类型变了,如果要打印,就去创造一个函数n")
print(str1)
print(str2)
print("函数转化,实际类型没变,只是换了一个方式打印出来")
print(Str_To_Bytes(str2))
print("n字节序n")
print("BE大端序: ",hex(int.from_bytes(str2,byteorder='big',signed=False)).upper())
print("LE小端序: ",hex(int.from_bytes(str2,byteorder='little',signed=False)).upper())
#"解码"
print("n解码n之后类型还回来了n")
#因为是默认的utf-8,所以的话下面的解码方式可以不写utf-8,主要是为了编码的方式一致
print(str2.decode('utf-8'))
print("nb' x44 x71 x78' 解码后")
str4=b'x44x71x78'
str4=str4.decode()
print(str4)
于是就报错
unicode码兼容ASCII
为了字节空间的节约
有了utf-8,
u表示unicode
'中’的unicode是u 4e 2d int( Str or Digit , 进制)
int ( 10.25 ) "结果是10(Dec),因为 int "
int ( 10, 16 ) "报错"
int ("0xA",16) "结果是10(Dec)"
upper()函数
str="abc"
print(str.upper())
#输出ABC
Java
public static void main(String[] Dqx) {
System.out.println("Hello Dqx");
}
2. 运行java程序
3. 删除 .class文件
评论列表(0条)