c++:
using namespace std; int main(int argc, char*argv[]) { //此处const 必须有 const char *str = "abcdef"; const char *cmp = "bcdef"; //c++会检测类型,认为这个是常量字符串,如果我们不加const,会报warning //warning: ISO C++11 does not allow conversion from string literal to 'char *' //char *str = "abcdef"; //char *cmp = "bcdef"; //下面的方式会引起段错误,因为*ptr不是字符串 // printf("What's *(++str): %c \n ", *(++str)); // printf("What's *cmp: %c \n ", *cmp); //如下正确,*ptr代表这个指针指向的字符 printf("What's *(++str): %c \n ", *(++str)); printf("What's *cmp: %c \n ", *cmp); printf("checkout if char equal %d \n", *(str)==*cmp); //c中,stp和cmp都是指针,我们这样比较,是比较这两个指针值是否相同。 printf("checkout if str equal %d \n", str==cmp); //这种不经过类型转化的赋值,已经不被允许 //error: cannot initialize a variable of type 'long' with an lvalue of type 'const char *' //long int t1 = str; //要想把指针转化成int值,我们要先把它转化成成长整类型 long int t1 = (long int) str; int t2 =(int)t1; //在c++中,这种转化方式已经不被允许,因为指针的长度和long int相等。 //int t3 = (int)p_int; //c++很神奇,如果我们这样写,会报一个warning printf("what's str int %d \n", str); //可是,如果我们这样写,会报错 //warning: comparison between pointer and integer ('const char *' and 'int') // printf("what's str int %d \n", (int)str); printf("checkout if equal(int to int) %d \n", (long int)str ==t2); //c++中,str是指针,不能直接和整形数值比较 //printf("checkout if equal(int to str) %d \n", str == t2); return 0; }
编译警告:
g++ -std=c++11 c_cpp.cpp -o c_cpp c_cpp.cpp:37:35: warning: format specifies type 'int' but the argument has type 'const char *' [-Wformat] printf("what's str int %d \n", str); ~~ ^~~ %s 1 warning generated.
运行结果:
What's *(++str): b What's *cmp: b checkout if char equal 1 checkout if str equal 0 what's str int 118779659 checkout if equal(int to int) 0
c:
#include<stdio.h> #include<stdlib.h> int main(int argc, char*argv[]) { const char *str = "abcdef"; const char *cmp = "bcdef"; //下面的方式会引起段错误,因为*ptr不是字符串 // printf("What's *(++str): %c \n ", *(++str)); // printf("What's *cmp: %c \n ", *cmp); //如下正确,*ptr代表这个指针指向的字符 printf("What's *(++str): %c \n ", *(++str)); printf("What's *cmp: %c \n ", *cmp); printf("checkout if char equal %d \n", *(str)==*cmp); //c中,stp和cmp都是指针,我们这样比较,是比较这两个指针值是否相同。 printf("checkout if str equal %d \n", str==cmp); int p_int = (int) str ; printf("what's str int %d \n",(int) str); printf("what's p_int int %d \n", p_int); printf("checkout if equal(int to int) %d \n", (int)str == p_int); //我们用指针和整形值进行比较,会报warning //warning: comparison between pointer and integer ('const char *' and 'int') printf("checkout if equal(int to str) %d \n", str == p_int); return 0; }
编译警告:
gcc -Wall c_cpp.c -o c_cpp c_cpp.c:24:55: warning: comparison between pointer and integer ('const char *' and 'int') printf("checkout if equal(int to str) %d \n", str == p_int); ~~~ ^ ~~~~~ 1 warning generate
运行结果:
What's *(++str): b What's *cmp: b checkout if char equal 1 checkout if str equal 0 what's str int 188321487 what's p_int int 188321487 checkout if equal(int to int) 1 checkout if equal(int to str) 0