发布网友
共4个回答
热心网友
(1)
int a[]={1,2,3,4,5}; //OK
(2)
int a[5];
a={1,2,3,4,5};
//ERROR
结论:对于数组用大括号{}的赋值方式只是在定义的时候适用
否则必须用循环的方式
结构体初始化(方法一)
using
namespace std;
struct S{
int i;
float f;
};
struct S
s={10,15.5};//使用{}的正确方式
如果改成
struct S
s;
s={10,15.5};就不行
方法二(通行的方法)
从Ucos_ii.c内核代码中学到的
OS_MemClr((INT8U
*)&OSTCBTbl[0],sizeof(OSTCBTbl));Clear all the
tcb
下面是给结构体数组清零的函数,实质是将结构体占据的内存区域视为字符变量区域
,用循环对单个内存字节单元的清零来实现对结构体占据的内存区域即(结构体)的清零
void
OS_MemClr (INT8U *pdest, INT16U size)
{
while (size > 0) {
*pdest++
= (INT8U)0;
size--;
}
}
注意函数OS_MemClr中的强制类型转换 INT8U
(*)&OSTCBTbl[0],
目的是将结构体指针转化成字符型指针,对单个内存单元的清零(*pdest++ =
(INT8U)0;),来完成对结构体的清零(或者是结构体数组)
热心网友
#include<iostream>
using namespace std;
#define MAX 27
typedef struct
{
char x;
int y;
}Quan,*QQuan;
void main()
{
QQuan a[MAX];
for(int i=0;i<MAX;i++)
{
a[i]=new Quan;
a[i]->x='0';
a[i]->y=0;
}
for(i=0;i<MAX;i++)
{
cout<<a[i]->x<<"\t"<<a[i]->y<<endl;
}
}
自己看吧,相信你会看懂的,关键的一点就是new分配指针空间。
热心网友
for(i=0;i<MAX;i++)
{
a[i]=(QQuan)malloc(sizeof(Quan));
memset(a[i],0,sizeof(Quan));
}
需要引用<string.h>和<stdlib.h>头文件
热心网友
//QQuan a[MAX]是指针数组,不可能如你所说的初始化。
//Quan a[MAX]最前面少一个Q,才可以如你所说初始化,下面是测试程序。
#include <stdio.h>
#define MAX 27
typedef struct
{
char x;
int y;
}Quan,*QQuan;
void main()
{
Quan a[MAX]={{0,0}};
int i;
for(i=0;i<MAX;i++)
printf("%c%d\n",a[i].x ,a[i].y);
}