bar*_*top 2 c for-loop pointer-arithmetic
据我所知,在 C 中检查指针是否是数组末尾的一个元素是完全合法的,如下所示:
char arr[16];
for (char* ptr = arr; ptr != arr + (sizeof arr / sizeof arr[0]); ++ptr) {
// some code
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,做这样的事情是否定义明确且合法(请注意,这段代码只是一个例子来表明我的观点。在实际代码中,我有处理数组的函数,我想知道我是否可以只传递指向本地 char 变量的指针和尺寸 1):
char c;
for (char* ptr = &c; ptr != (&c + 1); ++ptr) {
// some code
}
Run Code Online (Sandbox Code Playgroud)
来自 C 标准(6.5.6 加法运算符)
7 就这些运算符而言,指向不是数组元素的对象的指针与指向长度为 1 的数组的第一个元素的指针的行为相同,该数组的元素类型为该对象的类型。
所以这个循环
for (char* ptr = &c; ptr != (&c + 1); ++ptr) {
// some code
}
Run Code Online (Sandbox Code Playgroud)
是正确的。