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++就可以使用构造函数, 那样的话就可以实现类似功能
结构题不能这样直接赋值,需要:
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;
以上只是为了示意。
结构题不能这样直接赋值,需要:
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
问题不是结构体赋值的问题。
(1)处有两个问题:缺少一个分号,指针没有初始化.
改成下面这样的试试看:
以下是我定义的变量:
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;
楼主少写了个;号,肯定是疏忽,略过.
我编译通过的一种正确写法是:
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;这样就能编译过去了!!!!
改成
vect->x=0;
vect->y = 0;这样就能编译过去了!!!!
#11
其实你还是没有理解为什么能编译通过.
编译通过了,并不能说明程序就一定是对的.你运行一下看看结果.
从上面的讨论来看,很多人没有搞清楚下面声明和赋值的确切含义:
这里只是声明一个整型指针b.不要以为接着就可以往(*b)里存数据了.在真正引用(*b)时还是通过指针b找到(*b)在内存中的位置,再往里写入整数10.如果不初始化b的话,这个位置就是一个随机值.如果运行通过了,也是你运气好.
编译通过了,并不能说明程序就一定是对的.你运行一下看看结果.
从上面的讨论来看,很多人没有搞清楚下面声明和赋值的确切含义:
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++就可以使用构造函数, 那样的话就可以实现类似功能
结构题不能这样直接赋值,需要:
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;
以上只是为了示意。
结构题不能这样直接赋值,需要:
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
问题不是结构体赋值的问题。
(1)处有两个问题:缺少一个分号,指针没有初始化.
改成下面这样的试试看:
以下是我定义的变量:
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;
楼主少写了个;号,肯定是疏忽,略过.
我编译通过的一种正确写法是:
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;这样就能编译过去了!!!!
改成
vect->x=0;
vect->y = 0;这样就能编译过去了!!!!
#11
其实你还是没有理解为什么能编译通过.
编译通过了,并不能说明程序就一定是对的.你运行一下看看结果.
从上面的讨论来看,很多人没有搞清楚下面声明和赋值的确切含义:
这里只是声明一个整型指针b.不要以为接着就可以往(*b)里存数据了.在真正引用(*b)时还是通过指针b找到(*b)在内存中的位置,再往里写入整数10.如果不初始化b的话,这个位置就是一个随机值.如果运行通过了,也是你运气好.
编译通过了,并不能说明程序就一定是对的.你运行一下看看结果.
从上面的讨论来看,很多人没有搞清楚下面声明和赋值的确切含义:
int *b;
*b = 10;
这里只是声明一个整型指针b.不要以为接着就可以往(*b)里存数据了.在真正引用(*b)时还是通过指针b找到(*b)在内存中的位置,再往里写入整数10.如果不初始化b的话,这个位置就是一个随机值.如果运行通过了,也是你运气好.