c语言指针型函数

c语言指针型函数有大佬能帮我分析一下这题的思路吗?

#include<string.h>  // 导入头文件<string.h>
#include<stdio.h>   // 导入头文件<stdio.h>

char *fun(char *t)  // 定义函数, 名称fun, 输入参数为char *, 返回值为char *
{
    char *p = t;    // 把t的值赋值给p, 相当于p指向与t相同的字符串
    return p + strlen(t) / 2;   // strlen返回值为字符串长度, 然后p位移其一半(向下取整)的距离并返回值
}

int main(int argc, char *argv[])
{
    char *str = "abcdefgh"; // str指向字符串“abcdefgh”
    str = fun(str);         // str调用fun函数, 参数为str, 并将返回值赋值给str
    puts(str);              // 此时str指向e, 输出为“efgh\n”
    return 0;
}

追问

谢谢!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-09-29

要区别指针和法,最好直接看变量的定义。

int *pk=&k, *pm=&m;

定义两个指针pk,pm分别指向k,m。此时的'*'表示定义的变量是int类型的指针,'&'表示取地址。

int k=2, m=4, n=6;

这就仅仅是定义三个int类型的变量。

您的理解是没有问题的。

第2个回答  2018-09-29
没区别,如果两个指针中间只有一个*就是两个指针(指针是地址是整数)相乘;指针内容*p是有类型的,编译器会对指针内容进行检查,如果类型匹配乘法运算(或*重载运算),就可以通过编译和运算。kp和pm是指针*kp 和 *pm是指针内容(k和m),*kp * *pm实质就是两个指针内容进行相乘(k*m)。
第3个回答  2018-04-22

指针相加没有意义,部分编译器禁止该行为

可以将指针强制转换为整数,计算后,再强制转换为对应类型指针

第4个回答  2018-12-12
不是这样

match函数名前的char* 是表示match函数结束时返回的值是一个字符串(char*), 如果把match前的*去掉, 即 char match( ......), 是表示match函数返回的值是一个字符(char), 那么你在match函数最后的return 语句要用相对应的数据类型
相似回答