对于printf这个函数,有着一系列的格式符号 比如你说的%d %s
不同的格式,有着不同的参数类型要求
比如%s 要求对应参数必须是char *型的 你例子中的string就是这一类型
所以不会出错
如果换成printf("%s",*string);,*string为char 型,对应的格式是%c
而%d对应的是整型,包括int short char等都可以用这个格式字符,不是int的会被转成int
类似的
%f float
%u unsigned int
对于格式输出,在网上有很多介绍 你也可以自己搜索一下
请重新学习c语言“数组”相关知识。
char * string="xxx";
实际上是叫编译器给你分配4字节的数组内存(不是3,因为子串尾部是'\0'),string是指向该数组首地址的指针。
printf("%s",string);中参数必须是地址,刚才说了,string应该是字符数组的地址,*string是字符串“xxx”中的第一个"x“。
这样说你明白了吧,如果还不清楚,请追问。
1、写成 char* string=“xxx”;是不是看着明白些了? char* 表示便令类型为字符指针,变量名为string;所以输出时写string而不是*string;
2、p=&a ,&表示引用,引用的结果是p和a的存储地址是一样的,他们的数据取值是一样的,p=&a,则*p=*&a;*和&可以看做抵消就是*p=a,所以第二个写作*P,而不是p;
3、不明白的话可以看看指针和引用的定义和使用。指针灵活,引用简单,多用就好了。
指针就是地址。
printf()函数的格式控制,%d是输出一个整型数据,因此要用*p。
%s是输出一个字符串,因此要用字符串的首地址,char *str,str就是指向字符串的首地址。
如果用*string,就是printf("%c",*string),输出第一个字符。
字符串指针是指向字符串的首地址,就像数组一样,数组名就是首地址,这也是一样。输出字符串直接用指针名就可以了。
*p。*加指针名是取指针所指向的地址的值。这里指针p指向整形a的地址,取地址的值就是a的值。