mil*_*bos 0 c pointers casting
有这个:
#include <stdio.h>
#include <stdlib.h>
int main(){
void *mem = malloc(10);
for(int i =0; i<10 ; i++)
(char*)mem[i] = 'a'; //want to cast in loop
}
Run Code Online (Sandbox Code Playgroud)
给出错误
warning: pointer of type ‘void *’ used in arithmetic [-Wpointer-arith]
(char*)mem[i] = 'a';
warning: dereferencing ‘void *’ pointer
error: invalid use of void expression
(char*)mem[i] = 'a';
Run Code Online (Sandbox Code Playgroud)
但是,必须在循环之前完成转换是可以的:
#include <stdio.h>
#include <stdlib.h>
int main(){
char *mem = malloc(10);
for(int i =0; i<10 ; i++)
mem[i] = 'a';
}
Run Code Online (Sandbox Code Playgroud)
循环的步骤不进行任何转换。那么为什么我不能做前者,我在每个循环中投射指针?
(char*)mem[i]强制转换索引操作的结果,这已经是一个语义错误,因为您无法索引到void *. 此代码解决了您的问题:
#include <stdio.h>
#include <stdlib.h>
int main(){
void *mem = malloc(10);
for(int i =0; i<10 ; i++)
((char*)mem)[i] = 'a'; //want to cast in loop
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
49 次 |
| 最近记录: |