gpt4 book ai didi

c - c 中的字符串和结构

转载 作者:太空狗 更新时间:2023-10-29 16:09:13 24 4
gpt4 key购买 nike

#include "stdafx.h"
#include <stdio.h>

struct s
{
char *st;
struct s *sp;
};

struct s *p1,*p2;
void swap(struct s *p1,struct s *p2);

int main()
{
int i;
struct s *p[3];
static struct s a[]={
{"abc",a+1},{"def",a+2},{"ghi",a}
};
for(i=0;i<3;i++)
{
p[i]=a[i].sp;
}
swap(*p,a);
printf("%s %s %s\n",p[0]->st,(*p)->st,(*p)->sp->st);
return 0;
}
void swap(struct s *p1,struct s *p2)
{
char *temp;
temp = p1->st;
p1->st = p2->st;
p2->st = temp;
}

这个程序输出为 abc,abc,ghi。我的疑问是 p[0]->st,(*p)->st,(*p)->sp->st 输出是什么。我们还没有用 abc 或 ghi 初始化 st。它如何输出字符串?

最佳答案

We havent intialised st with abc or ghi. How does it outputs the string?

静态分配的数组a中每个结构的st成员的值实际上是通过一个初始化列表来初始化的。写作

static struct s a[]={
{"abc",a+1},{"def",a+2},{"ghi",a}
};

执行后与写下内容同效:

static struct s a[3];
a[0].st = "abc";
a[0].sp = a+1;
a[1].st = "def";
a[1].sp = a+2;
a[2].st = "ghi";
a[2].sp = a;

在这两种初始化方法之后实际上发生的是你有一个静态分配的 struct s 循环链表,其中链表中每个节点的数据成员(st 成员)指向字符串文字,如“abc”、“def”等。sp 数据成员指向链表中的下一个节点。

关于c - c 中的字符串和结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7015000/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com