这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 软件与操作系统 » 【学习会】一起学习C语言之重温C语言

共22条 3/3 1 2 3 跳转至
院士
2018-06-08 00:15:44     打赏
21楼

测试题目五,解答如下:


#include <stdio.h>
#include <stdint.h>

typedef struct _QueueZoneClass
{
  void *content;
  struct _QueueZoneClass *next;
}QueueZoneClass;

typedef struct _QueueIndexClass
{
  QueueZoneClass *head;
  uint8_t entries;
}QueueIndexClass;

QueueZoneClass QZone[10] = {0, };
QueueIndexClass *pIndex;

void QueueInit(QueueIndexClass *pIn, QueueZoneClass *pQZ)
{
  pIn->head = pQZ;
  pIn->entries = 0;
}

int8_t QueueInsert(QueueIndexClass *pIn, QueueZoneClass *pQZ, uint8_t pos)
{
  int8_t err = 0;
  uint8_t i;
  QueueZoneClass *p = pIn->head;
  if(pos > pIn->entries)
  {
    pos = pIn->entries;
  }

  for(i = 0; i < pos; i++)
  {
    p = p->next;
  }
  pQZ->next = p->next;
  p->next = pQZ;
  pIn->entries += 1;

  return (err);
}

char *str[] = {
  "John",
  "Peter",
  "Machel",
};


int main()
{
  int8_t err = 0;
  uint8_t i;
  QueueZoneClass *p;
  QZone[1].content = (char *)str[0];
  QZone[2].content = (char *)str[2];
  QZone[4].content = (char *)str[1];
  QueueInit(pIndex, &QZone[0]);
  err = QueueInsert(pIndex, &QZone[2], 0);
  err = QueueInsert(pIndex, &QZone[1], 1);
  err = QueueInsert(pIndex, &QZone[4], 2);

  p = pIndex->head->next;

  for(i = 0; i < pIndex->entries; i++)
  {
    printf("%s\n", (char *)(p->content));
    p = p->next;
  }
  while(1)
  {
    ;
  }
}

运行结果如下:

rst01.jpg



院士
2018-06-09 11:17:53     打赏
22楼

第九章、字符串

字符串的应用非常多,也非常广泛,例如我们要保存的文件名就是一个字符串。本章我们就学习字符串的知识。

字符串的本质是字符类型变量有规则的顺序存储在一起的字符数组。其有三个重要的性质:一、字符变量顺序存储,不能分开存储;二、以’\0’为结束符;三、字符串名是其存储的首地址指针;

我们再对以上三点进行深入分析:

分析一:字符串属于静态生命周期,由于其应用特性,我们一般声明于flash上,因此不能被修改。如需修改,我们需要将字符串拷贝到RAM中来。

分析二:字符串的结束判断真的很单纯,就是判断字符值是否等于’\0’,换句话说,如果我们不慎将结尾的’\0’字符修改,则字符串将一往无前的查找那个属于它的’\0’结尾符,导致我们的显示异常,程序出错。

分析三:字符串的名字就是首地址指针,所以我们引用字符串时可以直接使用其名字,当然,如果我们声明字符串数组的话也只需要再加一层中括号,如Name[5][],就可以存储5个人的名字了。

再谈一点:对于字符串的内容,我们一般多使用字母、数字或者符号,其实,它还支持转义符——原理上就是字符数组嘛,如”hello\nEEPW\n”

在操作字符串的时候,我们的依据就是上面谈到的三点,首地址,顺序存储,结尾符。

这里我们以获取字符串长度的示例来说明:


uint8_t GetStrLength(char *p)
{
	uint8_t len;
	while(*p++ != 0)
	{
		lenen++;
	}
	return (len);
}
char str[] = “www.eepw.com.cn”;
void main(void)
{
	uint8_t temp;
	temp = GetStrLength(str);
	printf(“the length of string is %d\n”, temp);
	while(1)
	{
		;
	}
}




共22条 3/3 1 2 3 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]