根据指针用法: * 定义一个指针, &取变量地址,
int b = 1;
int *a = &b;
则*a =1,但对于字符串而言并非如此,直接打印指向字符串的指针打印的是地址还是字符串本身,具体看情况。
定义:
char *m1 = "coconut is lovely";
char *m2 = "passion fruit isnice";
char *m3 = "craneberry is fine";
注:实际声明应该是const char *m1,原因char *背后的含义是:给我个字符串,我要修改它,此处应该是要读取它,具体参考
测试输出:
用cout 打印*m1:
cout<<"Now use cout to print *m1="<<*m1<<endl;
打印输出:
Now use cout to print *m1=c
即输出m1指向字符串的第一个字符。
用cout打印m1:
cout<<"Now use cout to print m1="<<m1<<endl;
输出:
Now use cout to print m1=coconut is lovely
即输出m1所指的内容,而不是m1指向的地址
用printf打印%c ", *m1:
printf("Now use printf to print *m1=%c ", *m1);
输出:
Now use printf to print *m1=c
即为m1指向的字符串的第一位的内容,但注意是%c而不是%s。因为是字符型,而非字符串型。所以以下表达错误: printf("Now use printf to print *m1= %s ", *m1);
用printf 打印 %d m1
printf("Now use printf to print m1=%d ", m1);
输出:
Now use printf to print m1=4197112
即m1是指针,输出m1所指向的地址。上面例子中的cout<<m1输出的是字符串内容。二者不一致,似乎反常了。但是我们可以使得它们行为一致。如下:
用printf打印%s m1:
printf("Now use printf to print m1= %s ",m1);
输出:
Now use printf to print m1= coconut is lovely
即m1是指针,输出m1所指向的地址。使用%s而非%d就可以使得m1不去表示地址而去表示字符串内容。
完整例子:
#include <stdio.h> #include <iostream> using namespace std; int main() { char *m1 = "coconut is lovely"; char *m2 = "passion fruit isnice"; char *m3 = "craneberry is fine"; char* message[3]; int i; //cout *m1 cout<<"Now use cout to print *m1="<<*m1<<endl; //cout m1 cout<<"Now use cout to print m1="<<m1<<endl; //cout (int)m1: 64位机char*类型大小位8B,用long转换 cout<<"Now use cout to print m1="<<(int)m1<<endl; //printf %c *m1 printf("Now use printf to print *m1=%c ", *m1); //printf %s *m1 // printf("Now use printf to print m1= %s ",*m1); //printf %d m1 printf("Now use printf to print m1=%d ", m1); //printf %s m1 printf("Now use printf to print m1= %s ",m1); /* message[0] = m1; message[1] = m2; message[2] = m3; for (i=0; i<3; i++) printf("%s ", message[i]); */ }
输出:
Now use cout to print *m1=c Now use cout to print m1=coconut is lovely Now use cout to print m1=4197320 Now use printf to print *m1=c Now use printf to print m1=4197320 Now use printf to print m1= coconut is lovely
Ref:
- http://blog.csdn.net/feliciafay/article/details/6818009