当指向特定类型(例如int, char, float, ..)的指针增加时,其值将按该数据类型的大小增加。如果指向大小为x的数据的空指针被增加,它如何提前x字节指向?编译器如何知道将x添加到指针的值?
当前回答
在void指针中不允许进行指针算术运算。
原因:指针算术与普通算术不同,因为它是相对于基址发生的。
解决方案:在进行算术时使用类型强制转换操作符,这将使执行指针算术的表达式的基本数据类型已知。 例如:point是空指针
*point=*point +1; //Not valid
*(int *)point= *(int *)point +1; //valid
其他回答
在void指针中不允许进行指针算术运算。
原因:指针算术与普通算术不同,因为它是相对于基址发生的。
解决方案:在进行算术时使用类型强制转换操作符,这将使执行指针算术的表达式的基本数据类型已知。 例如:point是空指针
*point=*point +1; //Not valid
*(int *)point= *(int *)point +1; //valid
你不能在void *类型上做指针算术,正是因为这个原因!
不允许对void*指针进行指针算术运算。
在进行指针算术之前,必须将它强制转换为另一种类型的指针。
将其转换为char型指针,使指针向前增加x字节。
推荐文章
- C多行宏:do/while(0) vs作用域块
- time_t最终的类型定义是什么?
- 我需要显式处理负数或零时,总和平方数字?
- 函数名周围的括号是什么意思?
- 用C语言创建自己的头文件
- 格式化IO函数(*printf / *scanf)中的转换说明符%i和%d之间的区别是什么?
- main()中的Return语句vs exit()
- 如果不是内存地址,C指针到底是什么?
- 我如何在Visual Studio中预处理后看到C/ c++源文件?
- 保护可执行文件不受逆向工程的影响?
- 从C语言的函数返回一个struct
- C99 'restrict'关键字的实际用法?
- 检查子字符串存在于C中的字符串中
- 从标准输入中捕获字符,而不需要等待按enter键
- 查找当前可执行文件的路径,不包含/proc/self/exe