开发者社区> 问答> 正文

函数后面的形参char *与指针*的问题

直接看代码(先贴一段第5章函数里的代码)

#include<stdio.h>

void congratulateStudent(char *student, char *course, int numDays)
{
    printf("%s has done as much %s programming as i could fit into %d days.\n",
        student, course, numDays);
}

int main(int argc, const char * argv[])
{
    congratulateStudent("Mark", "Cocoa", 5);
    return 0;
}
这里的输出结果为:

全选复制放进笔记Mark has done as much Cocoa programming as i coule fit into 5 days.
但是我后来看到第8章地址与指针时,里面写道:

如果需要某个名称为ptr的变量用于保存浮点数变量的地址,则可以将其声明为:
float *ptr  
那么问题来了(不是想问挖掘机哪家强),这里的float *ptr和上面那段函数的形参char *student是一个意思么(都是指针的那个意思)?
如果是一个意思,那么,在函数后面取值时,直接用的是

printf("%s has done as much %s programming as i could fit into %d    days.\n",
student, course, numDays);
如果按照第8章地址与指针的内容来看,这段代码应该是:

printf("%s has done as much %s programming as i could fit into %d    days.\n",
*student, *course, numDays);
才对嘛(前两个参数加星号,去引用)

已经浆糊了,不知道有没有表达清楚,请各位帮帮我解惑〜非常感激。

展开
收起
a123456678 2016-06-06 19:44:41 2178 0
1 条回答
写回答
取消 提交回答
  • 首先看一个例子:

    char c = 'c';
    char *example = &c;
    char *str= "abc";
    在这个例子中,此处的example和str都是字符指针,但他们是有区别的。定义一个像
    "abc"这样的字符串字面量,其实做了2件事。
    
    在内存地址申明一个长度为4个char字符长度的地址,里面的值分别为'a','b','c','\0'。这里的'\0'很关键,它是字符串结束的标志。也是它区别于example指针的本质区别。
    "abc"会返回'a'的地址,换句话说str是指向这个字符串的第一个字符的。
    所以同样是char *指针,但有不同的用法,如果它作为一个字符串参数的话,必须声明为指针形式,这样编译器才能根据字符串的第一个字母的地址依次访问直到访问到\0。
    
    对于函数中,哪些参数需要传char *,哪些参数需要传char,我再举个例子。
    
    全选复制放进笔记#include <string.h>
    char *str = "abc";
    strlen(str);
    /* 这里需要接受一个字符串参数
     * 函数的作用是返回一个字符串的长度
     * 函数最后返回值是3
     */
    
    strchr(str, *str);
    /* 这里接受一个字符串参数和一个字符参数
     * 函数的作用是找到字符参数是否出现在字符串中
     * 第二个参数既然是接受字符参数,那就需要用*str,根据我前面的描述,它的值其实就是'a'
     * 函数最后返回值是一个char指针,指向'a'的地址
     */
    2019-07-17 19:29:19
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载

相关实验场景

更多