小编diz*_*cza的帖子

C typedef const参数

typedef float vec3[3];

void test(vec3 const vptr) {
    *vptr = 1.f; // error: assignment of read-only location
    vptr[0] = 1.f; // error: assignment of read-only location
    vptr++; // no error
}
Run Code Online (Sandbox Code Playgroud)

vec3 const vptr
Run Code Online (Sandbox Code Playgroud)

同样的

const vec3 vptr
Run Code Online (Sandbox Code Playgroud)

对于所有typedef?最后两个之间有什么区别吗?我想

vec3 const vptr <==> float* const vptr // a constant pointer to an object
const vec3 vptr <==> const float* vptr // a pointer to a constant object
??? <==> const float* const vptr // a constant pointer to a …
Run Code Online (Sandbox Code Playgroud)

c typedef declaration

9
推荐指数
1
解决办法
470
查看次数

迭代时修改列表

我知道你不应该在迭代列表时添加/删除项目.但是,如果我不更改列表长度,我可以修改列表中的项目吗?

class Car(object):
    def __init__(self, name):
        self.name = name
    def __repr__(self):
        return type(self).__name__ + "_" + self.name

my_cars = [Car("Ferrari"), Car("Mercedes"), Car("BMW")]
print(my_cars)  # [Car_Ferrari, Car_Mercedes, Car_BMW]
for car in my_cars:
    car.name = "Moskvich"
print(my_cars)  # [Car_Moskvich, Car_Moskvich, Car_Moskvich]
Run Code Online (Sandbox Code Playgroud)

或者我应该迭代列表索引而不是?像那样:

for car_id in range(len(my_cars)):
    my_cars[car_id].name = "Moskvich"
Run Code Online (Sandbox Code Playgroud)

问题是:上述两种方式是允许的,还是只有第二种方式没有错误?

如果答案是肯定的,那么以下代码段是否有效?

lovely_numbers = [[41, 32, 17], [26, 55]]
for numbers_pair in lovely_numbers:
    numbers_pair.pop()
print(lovely_numbers)  # [[41, 32], [26]]
Run Code Online (Sandbox Code Playgroud)

UPD.我想看看python文档,它说"允许这些操作",而不是某人的假设.

python iteration list

6
推荐指数
2
解决办法
1万
查看次数

标签 统计

c ×1

declaration ×1

iteration ×1

list ×1

python ×1

typedef ×1