我有两个关于c语言的问题

时间:2011-04-28 16:52:47

标签: c pointers global-variables

1)我们可以定义一个空指针吗? 例如void * pointer;
在C中允许吗?什么是空指针?
2)我总是听说全局变量,但我不知道如何定义全局变量,我的意思是在哪里定义全局变量?在文件的开头还是什么?

9 个答案:

答案 0 :(得分:2)

  1. 是。 void指针是指向内存的指针,我们没有指定该内存位置的类型。

  2. 在任何函数或类之外定义它们。

答案 1 :(得分:0)

i)C中允许使用空指针,它们基本上代表原始地址(即没有类型定义)。

ii)全局变量是在函数范围之外定义的全局变量,例如在c模块的顶部。

答案 2 :(得分:0)

void指针是指向任何类型的指针。可以将void指针强制转换为任何类型,并且可以将指向任何类型的指针强制转换为void指针。

全局变量是程序中所有函数可用的变量(而局部变量仅在其创建的函数中可用)。全局变量可以在任何函数之外声明,但通常它们在main()函数之前声明。可以一次定义全局变量组。

答案 3 :(得分:0)

C全局变量只是在任何函数之外定义的变量。例如:

int xyz; /* Global */
int main() {
    return 1;
}

答案 4 :(得分:0)

1)当然可以。 void指针是原始指针。它们用于引用存储器的地址,其中存储了未知类型的数据。

2)在函数外声明的每个变量都是全局变量。要与其他模块共享,请使用关键字extern。 (编辑:当然在C中,变量必须在使用之前声明。因此,应该在模块的开头声明一个“真正的”全局变量,以便能够在每个函数中使用它)

答案 5 :(得分:0)

对于全局变量,C中没有“全局”变量,尽管您可以在任何方法之外的模块内定义变量,然后通过调用external在其他模块中引用它。

void指针只指向某些未知类型的数据。

答案 6 :(得分:0)

您可以使用void指针,但必须先将它们转换为适当类型的指针,然后才能取消引用它们。

int someFunction(type_t type, void *ptr)
{
   type_one_t *t1_ptr = NULL;
   type_two_t *t2_ptr = NULL;
   common_t *c_ptr = NULL;

   if(type == TYPE_1){
     t1_ptr = (type_one_t*)ptr;
     c_ptr = t1_ptr->pcommon;
   }
   else if(type == TYPE_2){
     t2_ptr = (type_two_t*)ptr;
     c_ptr = t2_ptr->pcommon;
   }
   else{
     return INVALID_VAL;
   }

   return c_ptr->someValue;
}

全局变量在函数外声明。

int a;

void func_1(int b)
{
  int k = someVal();
  a = k + b;
}

void func_2(int c)
{
  a = a + c;
}

这里,a是全球性的。

答案 7 :(得分:0)

  1. 是的,绝对可以用 C 语言定义 void指针。示例:void * pointer = &variable; 空指针指向任何类型的变量。因此,当要引用存储在指针中的值时,必须使用类型转换。因此,您可以使用指针指向任何数据。例如,
void * pointer = NULL; //declaring

//pointing to an integer
int a = 10;
pointer = &a;
printf("a = %d\n", *(int *)pointer);

//pointing to a double value
double b = 30.56;
pointer = &b;
printf("b = %0.2lf\n", *(double *)pointer);

//pointing to a character value
char c = 'a';
pointer = &c;
printf("c = %c\n", *(char *)pointer);

因此,空指针很有帮助。在函数中使用会更有帮助。

  1. 全局变量在需要特定变量以在程序中的某些函数中使用时使用。如果将变量定义为全局变量,则无需在每个函数中声明相同的变量。尽管声明全局变量不是一个好习惯。您可以将变量的值作为通过引用传递
#include <stdio.h> //header file declaration section
#define MAX 50 //section for preprocessors
int a = 20; //global variable declaration section

int main()
{
...................
return 0;
}

答案 8 :(得分:-1)

全局变量:全局变量是一个变量,我可以在整个程序中访问和修改(如果需要)。

Void指针:这些指针可以转换为任何类型。