我对C比较陌生。我有一个问题,我可以全局声明一个数组,然后在一个方法中更改其值,然后在其他方法中使用该更改的值吗?
喜欢,
int array[5] = {11,12,13,14,15}
void somemethod()
{
//Changing Array Values
}
void somemethod2()
{
int k;
for(k= 0; k<5;k++)
printf ("New Value of Array %d" , array[k])
}
我问这个是因为我做了类似于上面代码的事情,但唯一的问题是,当我想打印出数组的新值时,它只打印出k
的值,这是0,1,2,3,4
答案 0 :(得分:2)
当然可以。我不想在pastebin上浏览那段代码。
#include <stdio.h>
int array[5] = {11,12,13,14,15};
void some_other_method()
{
int i = 0;
printf("\nsome_other_method():\n");
for(i = 0; i < 5; i++) {
printf("array[%d]: %d\n", i, array[i]);
}
}
void some_method()
{
array[0] = 420;
some_other_method();
}
int main(int argc, char *argv[])
{
int i = 0;
// print global array
printf("\noriginal array:\n");
for(i = 0; i < 5; i++) {
printf("array[%d]: %d\n", i, array[i]);
}
some_method();
return 0;
}
答案 1 :(得分:2)
您的代码存在问题 - 您已为其提供了链接(http://codepad.org/Eo7KTFY9):
for(t=0;t<NUM_THREADS; t++);
pthread_join(guests[t], NULL);
那只是空循环。此外 - 第二行访问值不在您的数组中,因为当时t等于NUM_THREADS。它应该是:
for(t=0;t<NUM_THREADS; t++)
pthread_join(guests[t], NULL);
甚至更好:
for(t=0;t<NUM_THREADS; t++)
{
pthread_join(guests[t], NULL);
}
所以一般来说,你的问题就在别的地方,你提出了错误的问题; - )
此外,这也是不正确的:
void *guest(void *threadid)
{
...
long tid;
tid = (long)threadid;
tid将获得指针的值而不是指向的值。此外 - 您确定平台上的指针与长型指针的长度相同吗?我怀疑。这也是问题所在:
long t;
...
for(t=0; t<NUM_THREADS; t++)
{
...
pthread_create(&guests[t], NULL, guest, (void *)t);
}
你想要传递的是指向t的指针但是已经转换为(void *)所以你应该使用:
pthread_create(&guests[t], NULL, guest, (void *)&t);
同样,来自客人例程的tid作业应该变为:
tid = *((long*)threadid);
答案 2 :(得分:1)
试试这个
#include <stdio.h>
#include <stdlib.h>
#define arr_len 5
int array[arr_len] = {11, 12, 13, 14, 15};
void change_array();
void print_array();
int main(int argc, char** argv) {
print_array();
change_array();
print_array();
return (EXIT_SUCCESS);
}
void change_array() {
int i = 0;
while (i < arr_len) {
array[i] = i;
++i;
}
}
void print_array() {
int i = 0;
while (i < arr_len) {
printf("array[%d]: %d\n", i, array[i]);
++i;
}
}
结果:
array[0]: 11
array[1]: 12
array[2]: 13
array[3]: 14
array[4]: 15
array[0]: 0
array[1]: 1
array[2]: 2
array[3]: 3
array[4]: 4