1)我们可以定义一个空指针吗?
例如void * pointer;
在C中允许吗?什么是空指针?
2)我总是听说全局变量,但我不知道如何定义全局变量,我的意思是在哪里定义全局变量?在文件的开头还是什么?
答案 0 :(得分:2)
是。 void指针是指向内存的指针,我们没有指定该内存位置的类型。
在任何函数或类之外定义它们。
答案 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)
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);
因此,空指针很有帮助。在函数中使用会更有帮助。
#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指针:这些指针可以转换为任何类型。