解析C/C++复杂类型声明详解

需积分: 9 2 下载量 199 浏览量 更新于2024-07-31 收藏 75KB DOC 举报
本文主要探讨如何理解和解析C和C++中的复杂类型声明,针对那些可能会让人困惑的复杂语法,如`int * (* (*fp1)(int) ) [10]`。文章从基础开始,首先介绍简单声明,如`int n;`表示一个整型变量,以及`int *p;`表示一个指向整型的指针。作者强调在声明指针或引用时,应保持清晰易懂的格式,避免误解。 接着,文章深入到指针的嵌套,如`char argv;`表示一个指向字符数组的指针数组。它指出,指针的层级可以无限递增,但并非所有组合都是合法的,例如`int p1`表示一个指向整型指针的指针,`int *&p2`表示一个指向整型指针的引用是合法的,但`int&* p3`(引用的指针)和`int&&p4`(引用的引用)则不合法。 文章还讨论了数组的声明,如`int RollNum[30][4];`,其中`int(*p)[4]=RollNum;`表示`p`是一个指向4个整数的数组的指针,而`int*q[5];`则是包含5个整型指针的数组。 在混合使用*(指针)和&(引用)时,要特别注意其语义差异,比如`intp1`表示一个指针到指针,`int*&p2`是一个引用到指针,而`int&*p3`则是非法的,因为引用不能直接指向另一个引用。 虽然复杂的类型声明在某些场景下可能有助于灵活性,但作者明确指出它们不是推荐的编程风格,其重点在于帮助读者掌握解析技巧,以便在遇到复杂声明时能准确理解其含义。阅读本文时,建议在高分辨率屏幕上,以确保代码与注释的清晰显示。

import sys import re import jieba import codecs import gensim import numpy as np import pandas as pd def segment(doc: str): stop_words = pd.read_csv('data/stopwords.txt', index_col=False, quoting=3, names=['stopword'], sep='\n', encoding='utf-8') stop_words = list(stop_words.stopword) reg_html = re.compile(r'<[^>]+>', re.S) # 去掉html标签数字等 doc = reg_html.sub('', doc) doc = re.sub('[0-9]', '', doc) doc = re.sub('\s', '', doc) word_list = list(jieba.cut(doc)) out_str = '' for word in word_list: if word not in stop_words: out_str += word out_str += ' ' segments = out_str.split(sep=' ') return segments def doc2vec(file_name, model): start_alpha = 0.01 infer_epoch = 1000 doc = segment(codecs.open(file_name, 'r', 'utf-8').read()) vector = model.docvecs[doc_id] return model.infer_vector(doc) # 计算两个向量余弦值 def similarity(a_vect, b_vect): dot_val = 0.0 a_norm = 0.0 b_norm = 0.0 cos = None for a, b in zip(a_vect, b_vect): dot_val += a * b a_norm += a ** 2 b_norm += b ** 2 if a_norm == 0.0 or b_norm == 0.0: cos = -1 else: cos = dot_val / ((a_norm * b_norm) ** 0.5) return cos def test_model(file1, file2): print('导入模型') model_path = 'tmp/zhwk_news.doc2vec' model = gensim.models.Doc2Vec.load(model_path) vect1 = doc2vec(file1, model) # 转成句子向量 vect2 = doc2vec(file2, model) print(sys.getsizeof(vect1)) # 查看变量占用空间大小 print(sys.getsizeof(vect2)) cos = similarity(vect1, vect2) print('相似度:%0.2f%%' % (cos * 100)) if __name__ == '__main__': file1 = 'data/corpus_test/t1.txt' file2 = 'data/corpus_test/t2.txt' test_model(file1, file2) 有什么问题 ,怎么解决

2023-06-13 上传