【问题标题】:Is casting possible in loop in c?是否可以在c中循环转换?
【发布时间】:2020-06-22 17:12:49
【问题描述】:

有这个:

#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
}

报错

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';

但是,必须在 before 循环之前进行强制转换是可以的:

#include <stdio.h>
#include <stdlib.h>

int main(){
    char *mem = malloc(10);
    for(int i =0; i<10 ; i++)
        mem[i] = 'a';
}

循环的步骤不进行强制转换。那么为什么我不能做前者,我在每个循环中投射指针呢?

【问题讨论】:

    标签: c pointers casting


    【解决方案1】:

    (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
    }
    

    【讨论】:

    • 所以[] 在演员之前有优先权?
    • 没错,是的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    • 2014-02-14
    • 1970-01-01
    相关资源
    最近更新 更多