声明数组并在两种不同的方法中使用它 - C.

时间:2013-12-01 00:08:38

标签: c arrays for-loop printf

我对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

3 个答案:

答案 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