实例化代码

来源:互联网 发布:网络协议是指 编辑:程序博客网 时间:2024/06/06 15:46
  1. /* 
  2. 虽然学过的C语言但是还是有些东西没遇到过 
  3. 带你见识下不知道的东西: 
  4.  
  5. */  
  6. #include <stdio.h>  
  7.   
  8. #define NUMBER 5  
  9. /* 
  10. define: 宏定义 
  11. 后面的变量名用大写 
  12. 编译时进行字符串自动替换也就是将文件内的NUMBER替换为5 
  13.  
  14. typedef 为现有的数据类型起个别名 
  15. 如typedef int int_wy--->那么int_wy就是代表的int类型 
  16. */  
  17. int array[NUMBER];  
  18. int main()  
  19. {  
  20.     int i=9;  
  21.     //1  
  22.     //puts一般用于显示不需要格式化输出的时候  
  23.     puts("用过吗?");//"用过吗?"+i-->这样再试试  
  24.     puts("用过吗?"  
  25.         "这么会吗?");  
  26.       
  27.     //2  
  28.     printf("他可发出响声:\a\a\a \n");  
  29.       
  30.     //3  
  31.     putchar('\n');  
  32.       
  33.     //4  
  34.     extern int array[];/*这个实际是没用的因为在之前已经声明了array数组了 
  35.                         这里不是定义array数组 extern 表示试用某处创建的数组*/  
  36.       
  37.     //5  
  38.     /* 
  39.     static 定义的对象是静态存储期,在main执行之前的准备阶段就被创建出来的, 
  40.     程序结束的时候才会消失 
  41.     */  
  42.   
  43.     //6字符串  
  44.     /* 
  45.     字符串在C++里面是直接用string就行的,c中用字符数组的形式表示的 
  46.     */  
  47.     char str[]="wangyang";  
  48.     printf("%s\n",str);  
  49.     char *p;  
  50.     /* 
  51.     这里明明是写的指针但是p在下面我没有直接用*p的形式但是这样完全可以 
  52.     这里涉及到内存中的存储问题: 
  53.  
  54.     我粗略的说一下: 
  55.     数组的存储应该是这样的,数组在栈中存储的是地址值 
  56.     而不是真正的数据值,数据值存在内存中的堆中,我把str赋值给p那么p中的值 
  57.     就是str[0]的地址值,访问时为什么这样就行呢? 
  58.     p[1]相当于在str[0]的地址值基础上加了1(这里的是char类型所以应该是1) 
  59.     加了1之后的地址就是str[1]的地址也就是p[1]就可以访问str[1]的数据 
  60.     注: 
  61.     在这里str的地址值就是指向了堆中的数据值,所以通过地址值即可获得他的值 
  62.     */  
  63.     p=str;  
  64.     printf("%c\n",p[1]);  
  65.       
  66.   
  67.     //7  
  68.     //注意下面这个问题  
  69.     //*p=&str;  
  70.     //cannot convert from 'char (*)[9]' to 'char'  
  71.     p=&str[0];//&运算符得到str的地址,p的值是地址,*p则是他的值  
  72.     printf("%c\n",p[1]);  
  73.     printf("%s\n",p);//输出整个字符串的值  
  74.   
  75.     char *q=&str[0];//p=str;这两句效果是一样的  
  76.     /*  
  77.     这里注意一下啊:(与上面的错误进行对照)  
  78.     *在这里的意义并不是代表指针对象本身,而是他的存在就表示这个变量是一个指针  
  79.     有点像变量类型那个意思,这里q的数据类型应该是char *  
  80.     */  
  81.     printf("%c\n",q[1]);  
  82.     printf("%c\n",*(q+3));//取出来的值应该是g-->str[3]-->q[3]  
  83.   
  84.     //8整数  
  85.     int *m,a=10;  
  86.     m=&a;  
  87.     printf("%d\n",*m);  
  88.     *m=100;  
  89.     printf("%d\n",*m);  
  90.   
  91.     return 0;  
  92. }  
[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. 打开你的编译器include目录中的ostream.h文件,你就回看到类似的如下代码:  
  2. ... ...  
  3. ... endl(ostream& os) { os << '\n' << flush; }  
  4. ... ...  
  5. 也就是说,endl比'\n'要多了一个“刷新”流里的缓冲的flush操作。  
  6. 以文件输出流(ofstream)为例:当流的缓冲区未满时,写入'\n'的是不会马上写到文件里的,但执行endl会“强行”把缓冲区的内容写入文件中。所以,endl不仅换行,还刷新流缓冲。  
  7.   
  8. iostream在这里耍了个小技巧,重载<<操作符"<<((ostream& *f)(ostream&))",使得当你执行"<< endl"时,其实调用了endl()函数。
0 0
原创粉丝点击