c语言中的void指针,C程序中void指针的概念
到目前為止,我對void指針的輕描淡寫如下。
當使用關鍵字void聲明指針變量時,它將成為通用指針變量。任何數據類型(char,int,float等)的任何變量的地址都可以分配給void指針變量。
main()
{
int *p;
void *vp;
vp=p;
}
由于可以將其他數據類型的指針分配給void指針,因此我在absolut_value(下面顯示的代碼)函數中使用了它。使具有一般功能
我試圖編寫一個簡單的C代碼,將整數或浮點數作為參數,并嘗試使其為+ ve(如果為負)。我寫了下面的代碼,
#include
void absolute_value ( void *j) // works if used float, obviously it must work but thats not my interest here.
{
if ( *j < 0 )
*j = *j * (-1);
}
int main()
{
int i = 40;
float f = -40;
printf("print intiger i = %d \n",i);
printf("print float f = %f \n",f);
absolute_value(&i);
absolute_value(&f);
printf("print intiger i = %d \n",i);
printf("print float f = %f \n",f);
return 0;
}
但是我遇到了錯誤,所以我知道我對void指針的理解是不正確的:(。因此,我現在將著手收集點,為什么會這樣。
我需要了解更多關于void指針的內容。
我們需要強制轉換void指針變量以取消引用。這是因為空指針沒有與之關聯的數據類型。編譯器無法知道(或猜測?)void指針指向的數據類型。因此,要獲取由void指針指向的數據,我們使用在void指針位置內保存的正確類型的數據進行類型轉換。
void main()
{
int a=10;
float b=35.75;
void *ptr; // Declaring a void pointer
ptr=&a; // Assigning address of integer to void pointer.
printf("The value of integer variable is= %d",*( (int*) ptr) );// (int*)ptr - is used for type casting. Where as *((int*)ptr) dereferences the typecasted void pointer variable.
ptr=&b; // Assigning address of float to void pointer.
printf("The value of float variable is= %f",*( (float*) ptr) );
}
如果程序員不確定最終用戶輸入的數據的數據類型,則空指針非常有用。在這種情況下,程序員可以使用void指針指向未知數據類型的位置。可以以要求用戶通知數據類型的方式來設置程序,并且可以根據用戶輸入的信息來執行類型轉換。下面是一個代碼段。
void funct(void *a, int z)
{
if(z==1)
printf("%d",*(int*)a); // If user inputs 1, then he means the data is an integer and type casting is done accordingly.
else if(z==2)
printf("%c",*(char*)a); // Typecasting for character pointer.
else if(z==3)
printf("%f",*(float*)a); // Typecasting for float pointer
}
關于空指針,您應記住的另一個重要點是–不能在空指針中執行指針算術。
void *ptr;
int a;
ptr=&a;
ptr++; // This statement is invalid and will result in an error because 'ptr' is a void pointer variable.
所以現在我明白了我的錯誤。我正在更正。
參考文獻:
http://www.antoarts.com/void-pointers-in-c/
http://www.circuitstoday.com/void-pointers-in-c。
新代碼如下所示。
#include
#define INT 1
#define FLOAT 2
void absolute_value ( void *j, int *n)
{
if ( *n == INT) {
if ( *((int*)j) < 0 )
*((int*)j) = *((int*)j) * (-1);
}
if ( *n == FLOAT ) {
if ( *((float*)j) < 0 )
*((float*)j) = *((float*)j) * (-1);
}
}
int main()
{
int i = 0,n=0;
float f = 0;
printf("Press 1 to enter integer or 2 got float then enter the value to get absolute value\n");
scanf("%d",&n);
printf("\n");
if( n == 1) {
scanf("%d",&i);
printf("value entered before absolute function exec = %d \n",i);
absolute_value(&i,&n);
printf("value entered after absolute function exec = %d \n",i);
}
if( n == 2) {
scanf("%f",&f);
printf("value entered before absolute function exec = %f \n",f);
absolute_value(&f,&n);
printf("value entered after absolute function exec = %f \n",f);
}
else
printf("unknown entry try again\n");
return 0;
}
總結
以上是生活随笔為你收集整理的c语言中的void指针,C程序中void指针的概念的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 江西师范大学c语言程序考研,2018年江
- 下一篇: 成信大2020C语言编程114,南京信息