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