Я пытаюсь использовать CS50 PSET4.
Может кто-нибудь объясните, почему первый работает вместо второго?
По сути, я объявил цвет char * вне цикла в первом и объявил цвет char * внутри всех моих операторов if во втором.
Это сработало, когда я объявил char * вне операторов if
void initBricks(GWindow window)
{
char* colour;
// TODO
for(int i=0,y=20;i < ROWS; i++)
{
y+= 30;
for(int j=0,x=5,c=0;j < COLS; j++)
{
if(i==0)
colour = "RED";
if(i==1)
colour = "BLUE";
if(i==2)
colour = "CYAN";
if(i==3)
colour ="ORANGE";
if(i==4)
colour = "GRAY";
GRect brick = newGRect(x,y,30,15);
setFilled(brick,true);
setColor(brick, colour);
add(window, brick);
x+= 40;
}
}
}
Но это не сработало, когда я объявил char * внутри всех операторов if
void initBricks(GWindow window)
{
// TODO
for(int i=0,y=20;i < ROWS; i++)
{
y+= 30;
for(int j=0,x=5,c=0;j < COLS; j++)
{
if(i==0)
char *colour = "RED";
if(i==1)
char *colour = "BLUE";
if(i==2)
char *colour = "CYAN";
if(i==3)
char *colour ="ORANGE";
if(i==4)
char *colour = "GRAY";
GRect brick = newGRect(x,y,30,15);
setFilled(brick,true);
setColor(brick, colour);
add(window, brick);
x+= 40;
}
}
}
Я новичок в указателях, но до сих пор понимаю, что char * - это своего рода эквивалент строки, в которой он указывает на адрес переменной, color, в данном случае.
Однако я не уверен, почему мне не нужно добавлять '&'
(оператор ссылки), когда я использую его в setColor(brick, colour)
.