第二天的学习

  • 一个人站在岔道口,分别通向A国和B国,这两个国家的人非常奇怪,

A国的人总是说实话,B国的人总是说谎话。路口站着一个A国人和一个B国人:甲和乙,

但是不知道他们真正的身份,现在那个人要去B国,但不知道应该走哪条路,需要问这两个人。

只许问一句。他是怎么判断该走那条路的?

 

如果甲是A国人,说的是真话,问甲:“如果我问乙哪条路是B之路,他会指哪条路?”他指出的乙说的路就是错误的,另一条路就是正确的。

  如果甲是B国人,说的是假话同样的问题问甲,因为乙说真话,甲会和乙的答案相反,那么另一条路就是正确的。

 

甲 A真,乙 B假       1A,2B          乙 1A,    1A       另外一条是正确

 

甲 B假,乙 A真       1A,2B         乙 2B,     1a,     2b是正确

 

攻击百度某广告:

 1 //攻击百度xianhua的广告
 2 #include<stdio.h>
 3 #include<stdlib.h>
 4 #include<windows.h>
 5 void openbaidu()
 6 {
 7     ShellExecuteA(0, "open", "http://www.baidu.com", 0, 0, 3);
 8 }
 9 
10 void closebaidu()
11 {
12     system("taskkill /f /im  iexplore.exe");//如果你默认浏览器是360就要 用360se.exe替换
13 }
14 
15 
16 void search()
17 {
18     keybd_event('X', 0, 0, 0);//按下X
19     keybd_event('X', 0, 2, 0);//松开X
20     keybd_event('I', 0, 0, 0);
21     keybd_event('I', 0, 2, 0);
22     keybd_event('A', 0, 0, 0);
23     keybd_event('A', 0, 2, 0);
24     keybd_event('N', 0, 0, 0);
25     keybd_event('N', 0, 2, 0);
26     keybd_event('H', 0, 0, 0);
27     keybd_event('H', 0, 2, 0);
28     keybd_event('U', 0, 0, 0);
29     keybd_event('U', 0, 2, 0);
30     keybd_event('A', 0, 0, 0);
31     keybd_event('A', 0, 2, 0);
32     Sleep(200);
33     keybd_event(0x0d, 0, 0, 0);//按下回车
34     keybd_event(0x0d, 0, 2, 0);//松开回车
35 
36 }
37 
38 void clickbaidu()
39 {
40     SetCursorPos(200, 300);//把光标移到屏幕的指定位置
41     mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);//按下鼠标左键
42     mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);//松开鼠标左键
43     
44 }
45 
46 
47 void main()
48 {
49     for (;;)
50     {
51         openbaidu();
52         Sleep(1000);
53         search();
54         Sleep(1000);
55         clickbaidu();
56         Sleep(3000);
57         closebaidu();
58     }
59 }

 

 

  • N维数组有大括号初始化,只有第一个中括号省略

列如:a[][4] = {}; a[][][5] = {};

 

 1 //二维数组一维初始化的方法
 2 #include<stdio.h>
 3 #include<stdlib.h>
 4 
 5 void main()
 6 {
 7     int a[3][4];
 8     for (int i = 0; i < 3 * 4; i++)
 9     {
10         a[i / 4][i % 4] = i;//a[i][j] = i*n +j+1;
11         printf("%-5d", a[i / 4][i % 4]);
12         if ((i + 1) % 4 == 0)
13             printf("\n");
14     }
15     getchar();
16 }

 

 

 1 //三维数组一维初始化方法
 2 #include<stdio.h>
 3 #include<stdlib.h>
 4 
 5 void main()
 6 {
 7     int a[3][4][5];
 8     for (int i = 0; i < 3 * 4 * 5; i++)
 9     {
10         a[i / 20][(i / 5) % 4][i % 5] = i;
11         printf("%-5d", a[i / 20][(i / 5) % 4][i % 5]);
12         if ((i + 1) % 5 == 0)
13             printf("\n");
14     }
15     getchar();
16 }

 

  • 多维数组a[i]代表某行的输地址。所以a[i] + j等价于&a[i][j]。而*(&a[i][j]) 等价于a[i][j]

 

 1 //二级指针 
 2 #include<stdio.h> 
 3 #include<stdlib.h> 
 4 
 5 void main()
 6 {
 7     
 8     int a = 32138;
 9     int *p = &a;
10     int **pp = &p; //指向指针的指针,即指向一级指针指向的变量 
11     printf("%d,%d,%d\n", a, *p, **pp);
12     char *p1 = p;//如果是cpp类型就不行
13     double *p2 = p;
14     printf("%d\n", *p);
15     printf("%d\n", *p1);
16     printf("%f\n", *p2);
17     printf("%d,%d,%d\n", sizeof(p), sizeof(p1), sizeof(p2));//4,4,4地址都是四个字节 
18     printf("%d,%d,%d\n", sizeof(*p), sizeof(*p1), sizeof(*p2));//4,1,8类型结果 
19     getchar();
20 
21 }

 

  • 对一个数排序,如果不想调动它们的大小,可以对这个数的地址进行排序(如:银行账户的储金排序)

 

  • 二级指针
 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 int a = 7;
 4 int b = 8;
 5 int    *pA = &a;
 6 int *pB = &b;
 7 
 8 void changeA(int **pp);
 9 void changeB(int ***ppp);
10 
11 void main()
12 {
13 
14     int **pp = &pA;
15     printf("%d\n", **pp);
16     printf("%x,%x\n", pp, &pA);
17     changeA(pp);//新建一个二级指针指向p2,不会改变原来的值
18     printf("%d\n", **pp);
19     printf("%x,%x\n", pp, &pA);
20     changeB(&pp);//ppp=&pp//ppp三级指针代表拥有三个地址并且管理第三个地址,&pp代表第三个地址&+p+p。*ppp代表第二个地址ppp-*。
21     printf("%d\n", **pp);
22     printf("%x,%x\n", pp, &pA);
23     
24     getchar();
25 }
26 
27 
28 void changeA(int **pp)//新建一个二级指针指向p2,不会改变原来的值
29 {
30     pp = &pB;
31 }
32 
33 void changeB(int ***ppp)//
34 {
35     *ppp = &pB;//*ppp代表 二级指针的地址
36 }
  • malloc
 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 
 4 void main()
 5 {
 6     int *p = (int *)malloc(20*4);//分配80个字节内存 1k=1024字节(bytes),1字节=8位(bits)
 7 
 8     //给内存赋值
 9     for (int i = 0; i < 20; i++)
10     {
11         p[i] = i;//[]的作用☆ int a[]={1,2,3}; int *p=a; p[i]等价于a[i] 但是 p++ √ 而 a++ ×
12         printf("%d,%x\n", p[i], &p[i]);
13         printf("%d,%x\n", *(p + i), p + i);
14     }
15     free(p);
16     //free(p);//如果没有赋空值就会报错
17     p =NULL;
18     free(p);//赋空值后可以联系free
19     free(p);
20     free(p);
21 
22     getchar();
23 }

 

 

  • 指针指引多维数组

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 
 4 void main()
 5 {
 6     int a[4][5];
 7     for (int i = 0; i < 4 * 5; i++)
 8     {
 9         a[i / 5][i % 5] = i;
10         printf("%-5d", a[i / 5][i % 5]);
11         if ((i + 1) % 5 == 0)
12             printf("\n");
13     }
14 
15     //三个类型相同步长不同的输地址
16     printf("%x\n", a);//数组第一行的行地址
17     printf("%x\n", *a);//数组第一个元素地址
18     printf("%x\n", &a);//数组的首地址
19     printf("%d,%d,%d\n", sizeof(*a), sizeof(**a), sizeof(*&a));//20,4,80;
20 
21     int    (*p)[5] = a;//等价于int    (*p)[5] = &a;
22     //a++; //错,a是个常量指针
23 
24     printf("%-5d,%-5d,%-5d,%-5d,%-5d,%-5d\n", *a, *(a + 1), *(a + 2), *a[0], *(a[0] + 1), *(a[2]));
25     //a,a+1,a+2 是行地址,a[0],a[0]+1,a[2]是列地址
26 
27     printf("%-5d,%-5d,%-5d,%-5d,%-5d,%-5d\n", *p, *(p + 1), *(p + 2), *p[0], *(p[0] + 1), *(p[2]));
28 
29     system("pause");
30 }

 

 

 

  • 字符常量
 1 //字符常量
 2 #include<stdio.h>
 3 #include<stdlib.h>
 4 
 5 void main()
 6 {
 7     char *ps = "ipcolfig";//字符串常量,不可以单个输出
 8     char *pr = ps;
 9     pr += 4;
10     //*pr = 'n';//ps是个地址常量,常量不可以更改
11     printf("%c\n", *pr);
12     system(ps);
13 
14     char str[20] = "taskoist";//可以单个输出
15     char *p = str;
16     p += 4;
17     *p = 'l';
18     printf("%x\n", str);
19 
20     system(str);
21 
22     system("pause");
23 
24 }

 

posted @ 2015-01-18 22:16  击进的Cocos  阅读(151)  评论(0)    收藏  举报