C语言中的问题

时间:2022-09-05 16:08:07
以下是我定义的变量:
struct vp56_mv {
    int x;
    int y;
};
typedef struct vp56_mv vp56_mv_t;

以下是我在程序的应用:
vp56_mv_t *vect
*vect = (vp56_mv_t) {0,0};

在程序编译的时候总是出现以下的错误d:\flvformatvp6dec\vp6.c(303) : error C2059: syntax error : '{'
请问高手为什么会这样,应该怎么解决啊????


         谢谢了!!!!

11 个解决方案

#1


*vect = (vp56_mv_t) {0,0}; //vect.x=0,vect.y=0;

#2


*vect = (vp56_mv_t) {0,0}; 
结构题不能这样直接赋值,需要:
vp56_mv_t *vect ;
vect->x=0;
vect->y = 0;
逐个赋值,到了C++就可以使用构造函数, 那样的话就可以实现类似功能

#3


能直接初始化?
结构体指针指向哪?

#4


*vect = (vp56_mv_t) {0,0}; 
结构题不能这样直接赋值,需要: 
vp56_mv_t *vect ; 
vect->x=0; 
vect->y = 0; 

这样也不对吧,vect 是随机值

vp56_mv_t  vp56_mv; 
vp56_mv_t *vect;
vect = &vp56_mv;

vect->x=0; 
vect->y = 0; 

以上只是为了示意。

#5


问题不是结构体赋值的问题。
以下是我定义的变量: 
struct vp56_mv { 
    int x; 
    int y; 
}; 
typedef struct vp56_mv vp56_mv_t; 

以下是我在程序的应用: 
vp56_mv_t *vect  //(1)
*vect = (vp56_mv_t) {0,0}; 

(1)处有两个问题:缺少一个分号,指针没有初始化.
改成下面这样的试试看:
struct vp56_mv
{
    int x;
    int y;
};

typedef struct vp56_mv vp56_mv_t;
vp56_mv_t vect;
vect = (vp56_mv_t) {0,0};

printf("x = %d\n", vect.x);
printf("y = %d\n", vect.y);

#6


以上各位无一正解,各位的代码在VS2005每一个能编译过的.
楼主少写了个;号,肯定是疏忽,略过.

我编译通过的一种正确写法是:
vp56_mv_t *vect;
(*vect).x = 0;  //.号也可以是->号
(*vect).y = 0;  //注意括号一定要加

这样可以工作,但是楼上的兄弟会说我的指针没有初始化,其实,如果把以上代码作为一个代码块,是不会有任何问题的.当然完美一点,我们来探讨一下如果对 *vect进行初始化.
首先对指针初始化,就是要给指针赋一个地址,楼主的解法错就错在妄图把一个值赋给一个野指针.
然而,如果要对vect初始化,就首先要有一个合适的内存片段.这样你必须先申请一个vp56_mv_t的内存,并对其初始化,例如:     vp56_mv_t A = {0,0};
然后:     vp56_mv_t *vect = &A;

#7


...

#8


指针没有初始化。。。。这么赋值是可以的。。汗。。。

#9


LZ的指针没有指向,,,,

如果没有指向地址的话,要先分配内存,再进行赋值....

#10


谢谢各位了,
改成
vect->x=0; 
vect->y = 0;这样就能编译过去了!!!!

#11


其实你还是没有理解为什么能编译通过.
编译通过了,并不能说明程序就一定是对的.你运行一下看看结果.
从上面的讨论来看,很多人没有搞清楚下面声明和赋值的确切含义:
int *b;
*b = 10;

这里只是声明一个整型指针b.不要以为接着就可以往(*b)里存数据了.在真正引用(*b)时还是通过指针b找到(*b)在内存中的位置,再往里写入整数10.如果不初始化b的话,这个位置就是一个随机值.如果运行通过了,也是你运气好.

#1


*vect = (vp56_mv_t) {0,0}; //vect.x=0,vect.y=0;

#2


*vect = (vp56_mv_t) {0,0}; 
结构题不能这样直接赋值,需要:
vp56_mv_t *vect ;
vect->x=0;
vect->y = 0;
逐个赋值,到了C++就可以使用构造函数, 那样的话就可以实现类似功能

#3


能直接初始化?
结构体指针指向哪?

#4


*vect = (vp56_mv_t) {0,0}; 
结构题不能这样直接赋值,需要: 
vp56_mv_t *vect ; 
vect->x=0; 
vect->y = 0; 

这样也不对吧,vect 是随机值

vp56_mv_t  vp56_mv; 
vp56_mv_t *vect;
vect = &vp56_mv;

vect->x=0; 
vect->y = 0; 

以上只是为了示意。

#5


问题不是结构体赋值的问题。
以下是我定义的变量: 
struct vp56_mv { 
    int x; 
    int y; 
}; 
typedef struct vp56_mv vp56_mv_t; 

以下是我在程序的应用: 
vp56_mv_t *vect  //(1)
*vect = (vp56_mv_t) {0,0}; 

(1)处有两个问题:缺少一个分号,指针没有初始化.
改成下面这样的试试看:
struct vp56_mv
{
    int x;
    int y;
};

typedef struct vp56_mv vp56_mv_t;
vp56_mv_t vect;
vect = (vp56_mv_t) {0,0};

printf("x = %d\n", vect.x);
printf("y = %d\n", vect.y);

#6


以上各位无一正解,各位的代码在VS2005每一个能编译过的.
楼主少写了个;号,肯定是疏忽,略过.

我编译通过的一种正确写法是:
vp56_mv_t *vect;
(*vect).x = 0;  //.号也可以是->号
(*vect).y = 0;  //注意括号一定要加

这样可以工作,但是楼上的兄弟会说我的指针没有初始化,其实,如果把以上代码作为一个代码块,是不会有任何问题的.当然完美一点,我们来探讨一下如果对 *vect进行初始化.
首先对指针初始化,就是要给指针赋一个地址,楼主的解法错就错在妄图把一个值赋给一个野指针.
然而,如果要对vect初始化,就首先要有一个合适的内存片段.这样你必须先申请一个vp56_mv_t的内存,并对其初始化,例如:     vp56_mv_t A = {0,0};
然后:     vp56_mv_t *vect = &A;

#7


...

#8


指针没有初始化。。。。这么赋值是可以的。。汗。。。

#9


LZ的指针没有指向,,,,

如果没有指向地址的话,要先分配内存,再进行赋值....

#10


谢谢各位了,
改成
vect->x=0; 
vect->y = 0;这样就能编译过去了!!!!

#11


其实你还是没有理解为什么能编译通过.
编译通过了,并不能说明程序就一定是对的.你运行一下看看结果.
从上面的讨论来看,很多人没有搞清楚下面声明和赋值的确切含义:
int *b;
*b = 10;

这里只是声明一个整型指针b.不要以为接着就可以往(*b)里存数据了.在真正引用(*b)时还是通过指针b找到(*b)在内存中的位置,再往里写入整数10.如果不初始化b的话,这个位置就是一个随机值.如果运行通过了,也是你运气好.