如何使用指针算术为C语言结构体内部的数组成员赋值
正确实现代码
C语言中arr[i]本质是*(arr + i)的语法糖,结构体成员访问符->是(*ptr).member的语法糖,将你原有可用的下标写法完全展开为纯指针算术的写法如下:
// 仅使用指针算术,完全不涉及[]运算符 *(( (myTable + 90)->p ) + 0) = 'a'; *(( (myTable + 90)->p ) + 1) = 'b'; *(( (myTable + 90)->p ) + 2) = 'c'; *(( (myTable + 90)->p ) + 3) = 'd';
如果连->运算符也需要替换为原始指针操作,可以写成:
*( (*(myTable + 90)).p + 0 ) = 'a'; *( (*(myTable + 90)).p + 1 ) = 'b'; *( (*(myTable + 90)).p + 2 ) = 'c'; *( (*(myTable + 90)).p + 3 ) = 'd';
原错误写法问题说明
- 你尝试的
*(myTable+90).(*(p+0))语法本身不合法:.运算符后必须跟随结构体成员名,不能直接跟解引用表达式;同时单独的p在结构体作用域外没有定义,必须先通过结构体实例拿到p数组的首地址,再做指针偏移计算。 (myTable+90)->(*(p+0))同理存在语法错误,->运算符后必须跟随结构体成员名,不能直接放解引用表达式。
内容的提问来源于stack exchange,提问作者Marc Nathaniel Valeros
相关产品推荐
相关产品推荐

