1. c语言中数组指针和结构体指针问题
结构体是一种数据类型,数组不是一种而是0~MAXINT种数据类型,所以结构名是一个变量名,数组名是一组变量名,所以结构体变量不代表地址,数组名是地址,所以数组名是一个常量指针,数组名用取址运算符得到的是一批变量的首地址所以和数组名表示的常量指针相同。结构体是不同类型的变量的集合,形一个新的数据类型,所以结构和预定义变量一样,是一个真正的变量,所以变量名不是指针而地址也和变量一样必须用取址运算符获取。
2. c语言结构体数组指针赋值问题
aaaa->a[0] = *p
3. C里函数声明中使用结构体数组指针怎么写
num是序号?那么直接fl[num]就是那个数组元素。
4. C语言结构体指针数组怎么声明
我说明写在案例的备注里,你参考吧。
#include<stdio.h>
typedefstructst
{
intid;
}ST,*STP;//先定义类型ST是结构类型STP是结构指针类型
intmain()
{
STPst[2];//这里st就是你要的结构指针数组
STst1,st2;//这里我定义了2个结构变量,并赋值,让指针数组的元素分别指向这两个变量地址
st1.id=1;st2.id=2;
st[0]=&st1;
st[1]=&st2;
printf("%d,%d ",st[0]->id,st[1]->id);//打印指针数组指向地址内容
return0;
}
5. C语言结构体指针建数组,使用结构体数组中的结构体中的结构体指针指向其他结构体,初始化时程序报错
你通过malloc分配出一个结构体数组。你要注意了head[i]表示的数组中下标为i的那个元素,这个head[i]等同于你程序中定义的ptr,你说通过ptr访问next成员用的是".还是"->"?肯定是"."是吧。只有你前面的部分是个指针才能用"->"例如:head->next 等同于 head[0].next;
6. c语言结构体中的数组和指针用起来有什么区别
感觉不是lz描述的问题,单纯看printf那句话没错。
建议lz贴程序。
----------------
给一个函数传递结构体最好用这种方式 struct word *word
7. C语言编程指向结构体数组的指针
1、结构体指针其实是一个指针,它存储的是指向某个结构体的“地址”,所以结构体指针数组存储的其实是指向一组结构体的“地址”数组,它本身并不包含结构体的具体内容(没有被分配内存)
2、所以当用到他们时,要么重定向,比如:
d=&b; //让d指向b,d存储的是b的地址,这样就能通过d来调用b了
要么用malloc为他们分配内存:
d=(struct h *)malloc(sizeof(struct h));
这样d就指向系统为其分配的一块内存,其内容就是struct h中的东西
8. c语言结构体中指针数组怎样赋值
看Unix/Linux上的man:
Standard
C
Library
Functions
gets(3C)
NAME
gets,
fgets
-
get
a
string
from
a
stream
SYNOPSIS
#include
char
*gets(char
*s);
char
*fgets(char
*s,
int
n,
FILE
*stream);
DESCRIPTION
The
gets()
function
reads
bytes
from
the
standard
input
stream
(see
intro(3)),
stdin,
into
the
array
pointed
to
by
s,
until
a
newline
character
is
read
or
an
end-of-file
con-
dition
is
encountered.
The
newline
character
is
discarded
and
the
string
is
terminated
with
a
null
byte.
....
gets是标准库函数,要求传入的是一个数组的地址。其实是要求caller应当分配空间给他。你的结构体中指针数组指向了已经分配好的内存吗?如果没有就别想了。想用就自己先给他空间
9. C语言 结构体数组指针问题 如何用结构体数组指针,表示结构体数组某元素中的字符串成员,这个字符串成
对着呢呀,c的值就应该是0x0803,因为我们平常用的x86的cpu是小端存储结构(所谓小端就是变量的低字节存放低地址的数据,高字节存放高地址的数据,大端存储与此相反),我写了一个测试程序,如下:
#include
typedef
struct
{
char
a;
char
b;
short
c;
}
ming;
int
main(void)
{
char
a[4]
=
{1,2,3,8};
ming
*ming
=null;
printf("&char[0]
is
0x%x\n",
&a[0]);
printf("&char[1]
is
0x%x\n",
&a[1]);
printf("&char[2]
is
0x%x\n",
&a[2]);
//低地址
printf("&char[3]
is
0x%x\n",
&a[3]);
//高地址
ming
=
(ming
*)a;
printf("ming->c
=
0x%x\n",ming->c);
return
0;
}
你运行一下可以看到,数据3是存放在了低地址上,8是存放在高地址上,那么根据小端存储的原则,编译器会把低地址上的数据(3)赋值给变量c的低字节(右端为低,左端为高),把高地址上的数据(8)赋值给变量c的高字节,所以0x0803是正确的结果
要想输出0x0308只需在给a初始化时改为char
a[4]={1,2,8,3};即可