首先,C和C++在大体结构上不同,却在语法上相同。 所以在使用的时候,我们会时常遇到一些莫名其妙的问题,觉得语法上是正确的,但是编译的时候却出现一个红色的 error! 比如今天我遇到的这个有意思的问题。
1. 今天看到一段代码,觉得很有意思:
1 #pragma warning(disable : 4090) 2 3 #include<stdio.h> 4 5 int main(int argv, char args []) { 6 7 const int var = 4; 8 int *p = &var; 9 *p = 1; 10 printf("%d\n",var); 11 getchar(); 12 } |
答案很定不用说: 1 原因也很简单: C弱类型语言,C++是强类型语言。 p指针指向了var的地址,并将var的值改变!
但是,我们再看看,这个两个代码:
1 #include<iostream> 2 3 using namespace std; 4 5 int main(int args , char argv[]) { 6 7 const int var = 10; 8 std::cout << "var =" << var << std::endl; 9 // int * p= &var; --不能转换,会报错! 10 //可以使用强制转换 11 int *p = (int *)&var; 12 *p = 3; 13 std::cout << "*p =" << *p << std::endl; 14 int num[var]; 15 16 int i = 0; 17 //初始化 18 for (auto data : num) { 19 data =++i; 20 std::cout<<"num["<<i-1<<"] =" << data << std::endl; 21 } 22 getchar(); 23 return 0; 24 } |