直接看代码(先贴一段第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);
才对嘛(前两个参数加星号,去引用)
已经浆糊了,不知道有没有表达清楚,请各位帮帮我解惑〜非常感激。
首先看一个例子:
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'的地址
*/
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。