【小白求助】关于结构体与指针

qq317075371 2012-04-15 11:59:19

#define MIXSIZE 1024
typedef int datatype;
//定义结构体
typedef struct

{
datatype data[MIXSIZE];
int last;

} seqlist;

seqlist *p;//①
和seqlist s,*p=&s;//②
所得到的指针l有什么区别么?

当我用第一种方式得到p
然后给l->data[4](要不就是l->data[3])赋值时 总是无法操作 无法赋值

我用的的是CodeBlocks 编译器gcc;

不知道能不能看懂我说的;

还有哪位大神可以留下qq;
以后有问题指点一下;

在校大学生一枚;
...全文
134 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiligululalala 2012-04-16
  • 打赏
  • 举报
回复
晕,l和1很象啊。

seqlist *p;//①
上面这个语句,只定义了一个指针,但这个指针并没有赋值。没有赋值啊!指向哪里是不知道的,当然了,可以用printf来看。但这个时候直接用p->data[4] = XX; 进行赋值,就是在向一块未知的内存进行写操作,基本就会出现段错误。
小默 2012-04-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

谢谢各位 大概懂了

只是觉得奇怪!
用第一种方法得到的结构体指针 ,再给p->data[]赋值的时候其他的值都可以 唯独p->data[3]无法赋值
所以很奇怪这是为什么,
[/Quote]
因为指向的内存区是未知的,所以会在现巧合的情况下,写操作没有让程序崩溃。
小默 2012-04-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

谢谢各位 大概懂了

只是觉得奇怪!
用第一种方法得到的结构体指针 ,再给p->data[]赋值的时候其他的值都可以 唯独p->data[3]无法赋值
所以很奇怪这是为什么,
[/Quote]

其他值可以是因为巧合。
qq317075371 2012-04-16
  • 打赏
  • 举报
回复
谢谢各位 大概懂了

只是觉得奇怪!
用第一种方法得到的结构体指针 ,再给p->data[]赋值的时候其他的值都可以 唯独p->data[3]无法赋值
所以很奇怪这是为什么,

haung01 2012-04-16
  • 打赏
  • 举报
回复
你前面的typedef只是定义了一个类型,后面声明的指针没有声明它是指向那个结构的,所以没法赋值。
  • 打赏
  • 举报
回复
seqlist *p;//①
和seqlist s,*p=&s;//②

1 定义了一个seqlist的指针变量,未做初始化。 p的作用就是可以指向一个seqlist的变量,但尚未指向

2 定义了一个seqlist变量s和seqlist指针变量*p, 然后取s的地址作为p的初始化值,这时候p不同于上一条的地方在于指向了一个真正的seqlist变量。

你之所以出错就是第一个p没有指向一个合适的seqlist变量,第二个p有指向。

看看这个:
int *pi;
int i, *pi=&i;

这个问题先把结构体放下分析一下,因为指针变量和变量跟是不是用在结构体上没有关系,你放到一块研究容易受到干扰。
kiss20081017 2012-04-16
  • 打赏
  • 举报
回复
指针申明后最好赋个初值,不然是很危险的!
qq317075371 2012-04-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

晕,l和1很象啊。

seqlist *p;//①
上面这个语句,只定义了一个指针,但这个指针并没有赋值。没有赋值啊!指向哪里是不知道的,当然了,可以用printf来看。但这个时候直接用p->data[4] = XX; 进行赋值,就是在向一块未知的内存进行写操作,基本就会出现段错误。
[/Quote]
考虑到l看着不方便了 所以改成p了 可是后边的忘记改了
我和朋友的电脑都是第四个数组赋不了值 所以很好奇 呵呵

69,378

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧