- 主题:请教两个二级指针的问题
chatgpt处理这类简单直接的代码任务大部分时候都是靠谱的
【 在 z16166 的大作中提到: 】
然后chagpt把我在9楼说的那些全都改了
【 在 forex 的大作中提到: 】
: Can you optimize my code?
: 然后附上楼主的代码 :)
:
--
FROM 111.198.17.15
去打开头文件看了一眼
确实都是按你说的写的:
__mingw_ovr
__attribute__((__format__ (gnu_printf, 1, 2))) __MINGW_ATTRIB_NONNULL(1)
int printf (const char *__format, ...)
{
register int __retval;
__builtin_va_list __local_argv; __builtin_va_start( __local_argv, __format );
__retval = __mingw_vprintf( __format, __local_argv );
__builtin_va_end( __local_argv );
return __retval;
}
【 在 liangf 的大作中提到: 】
: 全小写,单词直接加下划线
--
FROM 111.193.233.*
这种不能用,前面两个下划线的。
用clang-format能支持的风格是最好的,先用它内置的那几种风格里的一种,然后玩熟了再自定义。
https://clang.llvm.org/docs/ClangFormatStyleOptions.html
好处是工具能自动帮你校正书写风格,IDE里也支持clang-format,自己用命令行或者.clang-format配置文件也行。
或者用linux kernel的代码风格,kernel源码根目录下有配置好的.clang-format
【 在 sqsl 的大作中提到: 】
: 去打开头文件看了一眼
: 确实都是按你说的写的:
: __mingw_ovr
: ...................
--
FROM 221.218.160.*
【 在 z16166 的大作中提到: 】
: 没仔细看代码
: 我想说的是另外一个角度:
: 二维动态数组,也是可以用一维的数组来实现的,不需要进行二次的内存分配。
: ...................
int(*a)[M][N] = (int(*)[M][N])p;
大佬这样写效率更高而且清楚一些;
不过感觉这样不是很好理解,不是常写c的人还真的不容易写出来; 能转化成一般的二维数据的形式么,就是直接引用 a[i][j]这样
--
FROM 106.39.149.*
C应该不能
C++可以,用引用就行
int (*a)[M][N] = (int (*)[M][N])p;
const auto &b = *a;
printf("%d\n", b[1][3]);
另外就是这种要求M、N是编译期的常量。运行期M、N可变的话就不行了
得用p[row * M + col]这种去访问了
【 在 paramita555 的大作中提到: 】
:
: int(*a)[M][N] = (int(*)[M][N])p;
--
FROM 221.218.160.*
【 在 z16166 的大作中提到: 】
: C应该不能
: C++可以,用引用就行
: int (*a)[M][N] = (int (*)[M][N])p;
: ...................
C++可以,用引用就行
int (*a)[M][N] = (int (*)[M][N])p;
const auto &b = *a;
printf("%d\n", b[1][3]);
auto: 就是 int (&b)[M][N] = *a; 吧
果然大佬,厉害;
--
FROM 104.28.240.*
对
可以打出来类型。下面这个b2类型不一样。b和b3一样。
const auto& b = *a;
const auto& t = typeid(decltype(b));
printf("%s, %s\n", t.name(), t.raw_name());
const auto b2 = *a;
const auto& t2 = typeid(decltype(b2));
printf("%s, %s\n", t2.name(), t2.raw_name());
const int(&b3)[M][N] = *a;
const auto& t3 = typeid(decltype(b3));
printf("%s, %s\n", t3.name(), t3.raw_name());
【 在 paramita555 的大作中提到: 】
:
: C++可以,用引用就行
: int (*a)[M][N] = (int (*)[M][N])p;
: ...................
--
FROM 221.218.160.*
网络包在开头几个字节,必然有个类型或者长度标识这个包多长
先把包头收下来
【 在 ylh0315 的大作中提到: 】
: 请教一个问题,编译时不知道尺寸怎么办?
: 比如,从网络收一个数据包,不知道其大小,事先怎么安排buffer?又不能限制大小。
--
FROM 39.144.251.*
TLV接收端也需要限制长度,不然随便发一个超大的L,接收端就DoS了
【 在 ylh0315 的大作中提到: 】
: 对,就是TLV方法,Type,length ,vector。
: t,l组成固定长度的包头。T就是调用号,在函数数组的下标。服务器返回时用于标识订阅信息。
: 实际上我用了9个整数做包头,36字节。
: ...................
--
FROM 221.218.160.*