重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
方法一、在定义时赋初值
网站建设哪家好,找创新互联公司!专注于网页设计、网站建设、微信开发、小程序制作、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了宛城免费建站欢迎大家使用!
1、静态数组
int[3][3]={0};
2、动态数组
int**a=newint*[n];
for(inti=0;i<n;i++)
a[i]=newint[m](0);
方法二、在定义完后赋值
for(inti=0;i<n;i++)
{
for(intj=0;j<m;j++)
a[i][j]=0;
}
方法三、用一个循环吧数组所有元素设置为0:
intarr[100];
inti=0;
for(i=0;i<100;i++)
arr[i]=0;//ThiswillmakeallZERO
方法四、
1、全局变量和静态变量初始化时会自动被设置为0。如果们声明全局变量,那么在运行前会变成全0。
intarr[1024];//Thisisglobal
intmain(void)
{
//statements
}
2、对于局部数组简写的初始化语法。如果一个数组被部分初始化,没有被初始化的元素会被自动设置为相应类型的0。这是编译器自动完成的。可以这样写:
intmain(void)
{
intarr[1024]={0};//ThiswillmakeallZERO
//statements
}
3、可以用memset函数在程序开始时初始化数组。这条命令这在已经修改了数组之后又想将它重置为全0特别有用。
intarr[1024];
arr[5]=67;
memset(ZEROARRAY,0,1024);//ThiswillreinitializealltoZERO
#includestdio.h
#includestdlib.h
#includeunistd.h
#includesemaphore.h
#includepthread.h
#define PRODUCER 10//生产者数量
#define CONSUMER 8//消费者数量
#define BUFFER 20//缓冲区数量
sem_t empty,full;//同步信号量
pthread_mutex_t mutex;//互斥信号量
int buffer[BUFFER]; //缓冲区
int producer_id=0,consumer_id=0;//生产者消费者ID
int index_in=0,index_out=0;//生产者 消费者 存放 消费的位置
void print()//输出缓冲区
{
int i;
printf("Buffer:\n");
for(i=0;i20;i++)
{
printf("___");
}
printf("\n");
for(i=0;i20;i++)
printf("|%d|",buffer[i]);
printf("\n");
for(i=0;i20;i++)
{
printf("———");
}
printf("\n");
}
void *Producer()//生产者函数
{
int ID=++producer_id;
while(1)
{
sleep(3);
sem_wait(empty);
pthread_mutex_lock(mutex);
index_in=index_in%BUFFER;
printf("Producer %d in %d.\n",ID,index_in);
buffer[index_in]=1;//缓冲区置0
print();//输出缓冲区情况
index_in++;
pthread_mutex_unlock(mutex);
sem_post(full);
}
}
void *Consumer()//消费者函数
{
int ID=++consumer_id;
while(1)
{
sleep(3);
sem_wait(full);
pthread_mutex_lock(mutex);
index_out=index_out%BUFFER;
printf("\033[01;34mConsumer %d in %d\033[0m\n",ID,index_out);
buffer[index_out]=0;//缓冲区置0
print();//输出缓冲区情况
index_out++;
pthread_mutex_unlock(mutex);
sem_post(empty);
}
}
int main()
{
//freopen("text.txt","w",stdout);
int rthread[18],i;
pthread_t producer[PRODUCER];//生产者
pthread_t consumer[CONSUMER];//消费者
int sinit1=sem_init(empty,0,BUFFER);//初始化同步信号量
int sinit2=sem_init(full,0,0);
int minit =pthread_mutex_init(mutex,NULL);//初始化互斥信号量
if(sinit1 sinit2)
{
printf("sem initialize failed /n");
exit(1);
}
if(minit)
{
printf("sem initialize failed /n");
exit(1);
}
for(i=0;iPRODUCER;i++)//创建生产者线程
{
rthread[i]=pthread_create(producer[i], NULL, Producer, NULL);
if(rthread[i])
{
printf("producer %d create failed /n", i);
exit(1);
}
}
for(i=0;iCONSUMER;i++)//创建消费者线程
{
rthread[i]=pthread_create(consumer[i], NULL, Consumer,NULL);
if(rthread[i])
{
printf("consumer %d create failed /n", i);
exit(1);
}
}
for(i=0;iPRODUCER;i++)//销毁生产者线程
{
pthread_join(producer[i],NULL);
}
for(i=0;iCONSUMER;i++)//销毁生产者线程
{
pthread_join(consumer[i],NULL);
}
exit(0);
}
C语言中清除内存缓冲区的函数是fflush(
),清除输入缓冲区用fflush(stdin);
其中stdin表示标准输入。
该函数通常用在输入类函数的前面,用以清除输入缓冲区中的内容,避免接收到上次残留的内容而出错。
举例如下:
1、不加fflush函数:
// 将输入的5个字符存放到数组str中,并输出
int i;
char ch, str[6]={'\0'};
for(i=0; i5; i++)
{
scanf("%c", ch);
str[i] = ch;
}
printf("%s\n", str);
// 程序只能输入三个字符(每个字符间包含一个回车符),因为不加fflush函数时,将残留在缓冲区中的回车符也当成了一个字符输入到数组str中。
2、加fflush函数:
int i;
char ch, str[6]={'\0'};
for(i=0; i5; i++)
{
fflush(stdin); // 清除留在缓冲区中的回车符,确保接收到的是用户输入的字符
scanf("%c", ch);
str[i] = ch;
}
printf("%s\n", str);
// 程序能正常输出