char *,char[]比较

本文通过几个示例对比了C语言中使用char*指针、char[]数组以及malloc分配内存来处理字符串的不同之处,展示了它们在内存地址、赋值操作及相互转换上的特点。

2009-07-01

 

比较char*和char[]还有malloc的区别,代码如下:

代码 `(*(char**(*) (char **,char **))0) ( char **,char **)` 是一个非常复杂且危险的代码片段,下面逐步解释其含义: 1. `(char**(*) (char **,char **))`:这是一个强制类型转换操作。`char**(*) (char **,char **)` 定义了一个函数指针类型,该函数接受两个 `char **` 类型的参数,并返回一个 `char **` 类型的值。 2. `(char**(*) (char **,char **))0`:将整数 `0` 强制转换为上述定义的函数指针类型。这意味着将地址 `0` 解释为一个函数的入口地址。 3. `*(char**(*) (char **,char **))0`:对这个函数指针进行解引用操作,得到该地址处的函数。 4. `(*(char**(*) (char **,char **))0) ( char **,char **)`:调用这个函数,并传入两个 `char **` 类型的参数。 需要注意的是,这个代码是非常危险的,因为它尝试在地址 `0` 处调用一个函数。在大多数操作系统中,地址 `0` 是受保护的,不能被访问,这样的调用会导致程序崩溃,产生段错误。 以下是一个简单的示例,展示如何定义和使用类似的函数指针: ```c #include <stdio.h> // 定义一个函数,接受两个 char ** 类型的参数,并返回一个 char ** 类型的值 char** myFunction(char **a, char **b) { return a; } int main() { // 定义一个函数指针 char** (*funcPtr)(char **, char **); // 将函数指针指向 myFunction funcPtr = myFunction; char *str1 = "Hello"; char *str2 = "World"; char **ptr1 = &str1; char **ptr2 = &str2; // 调用函数指针 char** result = funcPtr(ptr1, ptr2); printf("Result: %s\n", *result); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值