V2EX RDF
 RDF 最近的时间轴更新
RDF

RDF

V2EX 第 271388 号会员,加入于 2017-11-30 18:32:59 +08:00
根据 RDF 的设置,主题列表被隐藏
二手交易 相关的信息,包括已关闭的交易,不会被隐藏
RDF 最近回复了
2023-01-14 15:21:54 +08:00
回复了 BiteDXH 创建的主题 Windows Win10 21h1 远程 RDP 10bit 花屏问题
AMD 显卡 有这个问题, 驱动开了 10bit , RDP 异常花屏, 改成 8bit 后正常, 显示器是 8 抖 10
MIT 6.824 分布式系统 可以观看 https://www.simviso.com 的译制课程。

simviso 有很强的 CS 专业功底和研发经验,想尽一些绵薄之力,通过组合各个顶级国外高校的课程,构建一整个计算机从本科到研究生的学习体系。也在尽最大的努力,做好每一点翻译,每一点知识分享。


~在哔哩哔哩 https://www.bilibili.com/video/BV1x7411M7Sf 已经有前 20 集译制课程免费分享~
[MIT 6.824 Distributed Systems Spring 2020 分布式系统 中文翻译版合集]

~~ https://www.simviso.com 官网体验更佳~~
MIT 6.824 分布式系统 可以观看 https://www.simviso.com 的译制课程。

simviso 有很强的 CS 专业功底和研发经验,想尽一些绵薄之力,通过组合各个顶级国外高校的课程,构建一整个计算机从本科到研究生的学习体系。也在尽最大的努力,做好每一点翻译,每一点知识分享。


~在哔哩哔哩 https://www.bilibili.com/video/BV1x7411M7Sf 已经有前 20 集译制课程免费分享~
[MIT 6.824 Distributed Systems Spring 2020 分布式系统 中文翻译版合集]

~~ https://www.simviso.com 官网体验更佳~~
2017-12-28 10:09:25 +08:00
回复了 RDF 创建的主题 程序员 写了个 char 辨析的玩具 :)
const int ArSize = 2;

//为了对 char 数组仅含'a' 和'\0'进行查看,故仅允许单个字符。
这样细节就拦清了 :)
补充:

为了测试阈限,
const int ArSize = 2;
输入为 a




字符串存的字符分别为‘ a ’和‘\0 ’

可以检查得更为仔细:


ASCIIized: a
ASCIIized:
打印 ASCII-10 进制-数组第 i 位字符所在地
a: 97

打印 ASCII-16 进制-数组第 i 位-char 指针-int 指针转
a: 00000061
a: 00000062

打印数组第 i 位字符所在地-内存地址-cout 对 char 内存地址-直接输出其字符

a: a
a:

打印数组第 i 位字符所在地-内存地址-将 char 内存地址以 int 形式输出

a: 0113F998
a: 0113F999


打印整个数组的内存地址的开始位置-将 char 类型的地址-转 int 以使其由 cout 正常输出--对 char 类型的内存地址

: 0113F998
: 0113F99A

打印整个数组的内存地址的开始位置-将 char 类型的地址-对 char 类型的内存地址
解除引用,得整个的 char 内存地址的指针--cout 对 char 指针由开始位置进行输出,直到\0

: a
到达了 char 数组的外部,所以值为未定义
: 烫烫烫 X N;

打印整个数组的内存地址的开始位置-将 char 类型的地址-对 char 类型的内存地址
解除引用,得整个的 char 内存地址的指针-转 int 以使其由 cout 正常输出-直到\0

: 0113F998
对整个数组内存地址+1-偏移量为整个数组的长度+1
解除引用,得整个偏移后的 char 内存地址的 char 指针--将 char 指针转 int 指针由 cout 正常输出
: 0113F99A
@gnaggnoyil
重新修订并补全说明:
#include "stdafx.h"
#include <iostream>
const int ArSize = 20;
int main()
{
using std::cin;
using std::endl;
using std::cout;
char name[ArSize];

cout << "ASCIIized: ";
cin.getline(name, ArSize);
cout << "ASCIIized:\n";
int i = 0;
while (name[i] != '\0')
{
cout << "打印 ASCII-10 进制-数组第 i 位字符所在地" << endl;
//打印 ASCII-10 进制-数组第 i 位字符所在地
cout << name[i] << ": " << int(name[i]) << endl << endl;

cout << "打印 ASCII-16 进制-数组第 i 位-char 指针-int 指针转" << endl;
//打印 ASCII-16 进制-数组第 i 位-char 指针-int 指针转
cout << name[i] << ": " << (int *)(char *)(name[i]) << endl;
cout << name[i] << ": " << (int*)(char *)(name[i] + 1) << endl << endl;

cout << "打印数组第 i 位字符所在地-内存地址-cout 对 char 内存地址-直接输出其字符" << endl;
//打印数组第 i 位字符所在地-内存地址-cout 对 char 内存地址-直接输出其字符
cout << endl << name[i] << ": " << (&name[i]) << endl;
cout << name[i] << ": " << (&name[i] + 1) << endl << endl;

cout << "打印数组第 i 位字符所在地-内存地址-将 char 内存地址以 int 形式输出" << endl;
//打印数组第 i 位字符所在地-内存地址-将 char 内存地址以 int 形式输出
cout << endl << name[i] << ": " << (int*)(&name[i]) << endl;
cout << name[i] << ": " << (int*)(&name[i] + 1) << endl << endl;

i++;
}
cout << "" << endl;

cout << "打印整个数组的内存地址的开始位置-将 char 类型的地址-转 int 以使其由 cout 正常输出--对 char 类型的内存地址" << endl;
//打印整个数组的内存地址的开始位置-将 char 类型的地址-转 int 以使其由 cout 正常输出--对 char 类型的内存地址
cout <<endl<< name[i] << ": " << (int*)(&name) << endl;
cout << name[i] << ": " << (int*)(&name + 1) << endl << endl;

cout << "打印整个数组的内存地址的开始位置-将 char 类型的地址-对 char 类型的内存地址" << endl;
cout << "解除引用,得整个的 char 内存地址的指针--cout 对 char 指针由开始位置进行输出,直到\\0" << endl;
//打印整个数组的内存地址的开始位置-将 char 类型的地址-对 char 类型的内存地址
//解除引用,得整个的 char 内存地址的指针--cout 对 char 指针由开始位置进行输出,直到\0
cout << endl << name[i] << ": " << (char *)(&name) << endl;
cout << "到达了 char 数组的外部,所以值为未定义" << endl;
//到达了 char 数组的外部,所以值为未定义
cout << name[i] << ": " << (char *)(&name + 1) << endl << endl;

cout << "打印整个数组的内存地址的开始位置-将 char 类型的地址-对 char 类型的内存地址" << endl;
cout << "解除引用,得整个的 char 内存地址的指针-转 int 以使其由 cout 正常输出-直到\\0" << endl;
//打印整个数组的内存地址的开始位置-将 char 类型的地址-对 char 类型的内存地址
//解除引用,得整个的 char 内存地址的指针-转 int 以使其由 cout 正常输出-直到\0
cout << endl << name[i] << ": " << (int*)(char *)(&name) << endl;
cout << "对整个数组内存地址+1-偏移量为整个数组的长度+1" << endl;
cout << "解除引用,得整个偏移后的 char 内存地址的 char 指针--将 char 指针转 int 指针由 cout 正常输出" << endl;
//对整个数组内存地址+1-偏移量为整个数组的长度+1
//解除引用,得整个偏移后的 char 内存地址的 char 指针--将 char 指针转 int 指针由 cout 正常输出
cout << name[i] << ": " << (int*)(char *)(&name + 1) << endl << endl;

cin.get();
}


对应输出:

ASCIIized: abc
ASCIIized:
打印 ASCII-10 进制-数组第 i 位字符所在地
a: 97

打印 ASCII-16 进制-数组第 i 位-char 指针-int 指针转
a: 00000061
a: 00000062

打印数组第 i 位字符所在地-内存地址-cout 对 char 内存地址-直接输出其字符

a: abc
a: bc

打印数组第 i 位字符所在地-内存地址-将 char 内存地址以 int 形式输出

a: 004FFCA4
a: 004FFCA5

打印 ASCII-10 进制-数组第 i 位字符所在地
b: 98

打印 ASCII-16 进制-数组第 i 位-char 指针-int 指针转
b: 00000062
b: 00000063

打印数组第 i 位字符所在地-内存地址-cout 对 char 内存地址-直接输出其字符

b: bc
b: c

打印数组第 i 位字符所在地-内存地址-将 char 内存地址以 int 形式输出

b: 004FFCA5
b: 004FFCA6

打印 ASCII-10 进制-数组第 i 位字符所在地
c: 99

打印 ASCII-16 进制-数组第 i 位-char 指针-int 指针转
c: 00000063
c: 00000064

打印数组第 i 位字符所在地-内存地址-cout 对 char 内存地址-直接输出其字符

c: c
c:

打印数组第 i 位字符所在地-内存地址-将 char 内存地址以 int 形式输出

c: 004FFCA6
c: 004FFCA7


打印整个数组的内存地址的开始位置-将 char 类型的地址-转 int 以使其由 cout 正常输出--对 char 类型的内存地址

: 004FFCA4
: 004FFCB8

打印整个数组的内存地址的开始位置-将 char 类型的地址-对 char 类型的内存地址
解除引用,得整个的 char 内存地址的指针--cout 对 char 指针由开始位置进行输出,直到\0

: abc
到达了 char 数组的外部,所以值为未定义
: 烫烫 4栽

打印整个数组的内存地址的开始位置-将 char 类型的地址-对 char 类型的内存地址
解除引用,得整个的 char 内存地址的指针-转 int 以使其由 cout 正常输出-直到\0

: 004FFCA4
对整个数组内存地址+1-偏移量为整个数组的长度+1
解除引用,得整个偏移后的 char 内存地址的 char 指针--将 char 指针转 int 指针由 cout 正常输出
: 004FFCB8



应该说明完善了。
第二次修订:

// 5.13 print name with while.cpp: 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
const int ArSize = 20;
int main()
{
using std::cin;
using std::endl;
using std::cout;
char name[ArSize];

cout << "ASCIIized: ";
cin.getline(name, ArSize);
cout << "ASCIIized:\n";
int i = 0;
while (name[i] != '\0')
{
cout << name[i] << ": " << int(name[i]) << endl;
cout << name[i] << ": " << (int *)(char *)(name[i]) << endl;
cout << name[i] << ": " << (int*)(char *)(name[i] + 1) << endl;
i++;
}
cout <<endl<< name[i] << ": " << (int*)(name) << endl;
cout << name[i] << ": " << (int*)(name + 1) << endl;


cin.get();
}


有:

ASCIIized: abc
ASCIIized:
a: 97
a: 00000061
a: 00000062
b: 98
b: 00000062
b: 00000063
c: 99
c: 00000063
c: 00000064

: 005AFA54
: 005AFA55
上文的表述形式少做修改,并显式表达:


#include "stdafx.h"
#include <iostream>
const int ArSize = 20;
int main()
{
using std::cin;
using std::endl;
using std::cout;
char name[ArSize];

cout << "ASCIIized: ";
cin >> name;
cin.get();
cout << "ASCIIized:\n";
int i = 0;
while (name[i] != '\0')
{
cout << name[i] << ": " << int(name[i]) << endl;
cout << name[i] << ": " << (int *)(char *)(name[i]) << endl;
cout << name[i] << ": " << (int*)(char *)(name[i] + 1) << endl;
i++;
}
cout <<endl<< name[i] << ": " << (int*)(name) << endl;
cout << name[i] << ": " << (int*)(name + 1) << endl;


cin.get();
}

有:

ASCIIized: abc
ASCIIized:
a: 97
a: 00000061
a: 00000062
b: 98
b: 00000062
b: 00000063
c: 99
c: 00000063
c: 00000064

: 0135FD7C
: 0135FD7D
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1122 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 10ms UTC 23:12 PVG 07:12 LAX 16:12 JFK 19:12
Do have faith in what you're doing.
ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86