void* 和char* 和int*
时间: 2024-06-22 20:03:12 浏览: 171
`void*`, `char*`, 和 `int*` 都是C/C++语言中的指针类型,但它们代表的数据类型和用途有所不同:
1. `void*`:这是一个通用指针类型,它并不指定特定的数据类型。当你声明一个`void*`指针时,它可以指向任何数据类型,无论是基本类型(如int, char)还是复杂类型(如结构体或类)。在实际操作中,`void*`通常用于动态内存分配(如`malloc`),或者是函数参数或返回值,当不确定具体类型时使用。
2. `char*`:这个类型的指针专门指向字符数组或单个字符。它常用于字符串处理,因为字符串在C语言中本质上就是一个字符数组。`char*`可以通过`&`操作符获取字符串的地址,也可以使用`strlen`函数计算字符串长度,或者用`strcpy`和`strcat`等函数进行字符串操作。
3. `int*`:这是整型指针,它指向的是一个整数。在程序中,你可以用它来传递整数变量的地址给函数,或者作为数组的元素指针。此外,`int*`可以用来遍历整数数组或者进行数学运算。
相关问题
Typedef int (*sqlite3_callback)(void *, int, char **, char **);
这是一个定义函数指针类型 sqlite3_callback 的语句,该函数指针类型指向一个函数,该函数的参数为 void *, int, char **, char **,返回值为 int。在 SQLite3 数据库中,该函数指针类型通常用于注册回调函数,以便在执行 SQL 语句时,返回结果集或错误信息等。
#include <stdio.h> #include <string.h> #include <stdlib.h> char* reverse(char* s) { int i = strlen(s); int j = i; char* ptr = (char*)malloc(strlen(s) * sizeof(char)); memset(ptr, 0, strlen(s) * sizeof(char)); i--; for (; i >= 0; i--) { ptr[i] = *s; s++; } ptr[j] = '\0'; s = ptr; return s; } void* obfuscate(void* ptr) { int* p = (int*)ptr; *p = (*p ^ 0xdeadbeef) + 0x1337; return ptr; } int main() { char* str = (char*)malloc(200 * sizeof(char)); printf("Enter a string: "); scanf("%s", str); str = (char*)obfuscate((void*)reverse(obfuscate((void*)str)))); printf("Reversed string: %s\n", str); free(str); return 0; } 整理这个代码格式,使其美观容易阅读
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char* reverse(char* s) {
int i = strlen(s);
int j = i;
char* ptr = (char*) malloc(strlen(s) * sizeof(char));
memset(ptr, 0, strlen(s) * sizeof(char));
i--;
for (; i >= 0; i--) {
ptr[i] = *s;
s++;
}
ptr[j] = '\0';
s = ptr;
return s;
}
void* obfuscate(void* ptr) {
int* p = (int*) ptr;
*p = (*p ^ 0xdeadbeef) + 0x1337;
return ptr;
}
int main() {
char* str = (char*) malloc(200 * sizeof(char));
printf("Enter a string: ");
scanf("%s", str);
str = (char*) obfuscate((void*) reverse(obfuscate((void*) str)));
printf("Reversed string: %s\n", str);
free(str);
return 0;
}
阅读全文