好几个月没摸书了,最近摸起来,看到《Objective-c编程》第8章地址与指针时,又跌进一个坑里,求解答:
直接看代码(先贴一段第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 *str
是一个字符指针可以理解吧?通常刚接触C语言
的话都会有这么一个疑问,为什么这个字符指针又可以代表字符串呢?首先看一个例子:
在这个例子中,此处的
example
和str
都是字符指针,但他们是有区别的。定义一个像"abc"
这样的字符串字面量,其实做了2件事。'a','b','c','\0'
。这里的'\0'
很关键,它是字符串结束的标志。也是它区别于example
指针的本质区别。"abc"
会返回'a'
的地址,换句话说str
是指向这个字符串的第一个字符的。所以同样是
char *
指针,但有不同的用法,如果它作为一个字符串参数的话,必须声明为指针形式,这样编译器才能根据字符串的第一个字母的地址依次访问直到访问到\0
。对于函数中,哪些参数需要传
char *
,哪些参数需要传char
,我再举个例子。