本文共 2200 字,大约阅读时间需要 7 分钟。
(1)指针是存放内存地址的变量。
(2)指针定义的一般形式:
1 int a=100;2 int *p=&a;//指针变量p的类型是:int *
(3)取地址操作符:&(定义时的&仅表示该变量是引用,而不是取地址);解引用操作符*(定义指针时的*仅6代表该变量是指针,而非解引用);以上二者是相反的过程。
(4)当需要在被调函数中直接修改主调函数中的变量是,可以将主调函数中变量的地址作为参数,并在被调函数中使用解引用直接修改指针指向的变量。
编写一个sort函数,将主函数中的变量重新赋值,赋值后a>=b>=c,并在主函数中补充函数调用语句
1 int main(int argc, char *argv[]) {2 int a = 80, b = 60, c = 90;3 /* input a line to make a>=b>=c;*/4 sort(&a, &b, &c);5 cout << a << " " << b << " " << c << endl;6 getchar();7 return 0;8 }
答案:
1 void my_swap(int *a, int *b) { //指针作为参数,用解引用来表示变量值 2 int tem = *a; 3 *a = *b; 4 *b = tem; 5 } 6 7 void sort(int *pa, int *pb, int *pc) { //指针作为参数,用解引用来表示变量值 8 if (*pa < *pb) my_swap(pa, pb); 9 if (*pa < *pc) my_swap(pa, pc);10 if (*pb < *pc) my_swap(pb, pc);11 }
答案解析见代码
1 void equal(char str7[], char str8[]) { 2 printf("%d\n", str7 == str8); 3 } 4 int main(int argc, char *argv[]) { 5 char str1[15] = "hello,world"; 6 char str2[15] = "hello,world"; 7 char str3[] = "hello,world"; 8 char str4[] = "hello,world"; 9 10 char *str5 = "hello,world";11 char *str6 = "hello,world";12 13 //数组存储在栈上,str1和str3属于不同的数组变量,在内存中没有任何交集,故结果为0;14 printf("%d\n", str1 == str2);15 //虽然str3,str4没有显式声明数组的大小,其大小根据初值决定,此外其他分析同上,故其结果为0;16 printf("%d\n", str3 == str4);17 //字符串常量存储在字符串常量去中,内容相同的字符串常量只有一份拷贝,故str5,str6同时指向字符串常量的首字母,故str5==str6,结果为1;18 printf("%d\n", str5 == str6);19 //函数的结果取决于输入的参数值是否相等,由于str1!=str2,故结果为0,若参数是str5,str6,则其结果为120 equal(str1, str2);21 getchar();22 return 0;23 }
以下代码段说明上面的知识点四
1 //以下四种函数声明方式等价,都表示形参是指针2 void equal(char *str7,char *str8);3 void equal(char str7[1],char str8[1]);4 void equal(char *str7[15],char *str8[15])5 void equal(char *str7[100],char *str8[100])
答案:在概念上,句柄记录着资源对象列表中某个成员的索引,起作用类似于指向指针的指针,虽然句柄本质上是一个指针,但是指针可以随意指向一个对象,而句柄只能间接指向资源对象;在使用上,通过指针可以直接修改指针指向的内容,通过句柄只能调用一些Windows提供的API函数,这种对句柄的限制主要是出于安全考虑,防止用户随意修改系统资源,从而导致一场情况发生。
转载地址:http://mnycx.baihongyu.com/