Chinaunix首页 | 论坛 | 博客
  • 博客访问: 14498095
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 20:58:08

下载本文示例代码
  何为指针?   指针基本上和其它的变量一样,唯一的一点不同就是指针并不包含实际的数据,而是包含了一个指向内存位置的地址,你可以在这个地址找到某些信息。这是一个很重要的概念,并且许多程序或者思想都是将指针作为它们的设计基础,例如链表。  开始  如何定义一个指针?呃,就像定义其它的变量一样,不过你还需要在变量名之前添加一个星号。例如,下面的代码创建了两个指向整数的指针:   int* pNumberOne;   int* pNumberTwo;   注意到变量名的前缀“p”了吗?这是编写代码的一个习惯,用来表示这个变量是一个指针。   现在,让我们把这些指针指向一些实际的值吧:   pNumberOne = &some_number;   pNumberTwo = &some_other_number;   “&”标志应该读作“the address of(……的地址)”,它的作用是返回一个变量的内存地址,而不是这个变量本身。那么在这个例子中,pNumberOne就是some_number的地址,亦称作pNumberOne指向some_number。   现在,如果我们想使用some_number的地址的话,那么我们就可以使用pNumberOne了。如果我们希望经由pNumberOne而使用some_number的值的话,我们可以用*pNumberOne。“*”应该读作“the memory location pointed to by(由……指向的内存位置)”,它用来取得指针所指向的值。不过指针声明的情况例外,如“int *pNumber”。  到现在都学到什么了(一个例子):  咻!要理解的东西太多了,所以在此我建议,如果你还是不理解以上的概念的话,那么最好再通读一遍;指针是一个复杂的主题,要掌握它是要花些时间的。   这里有一个示例,解说了上面讨论的那些概念。它是由C编写成,并不带有C 的那些扩展。   #include   void main()   {   // 声明变量:    int nNumber;    int *pPointer;    // 现在,给它们赋值:    nNumber = 15;    pPointer = &nNumber;    // 打印nNumber的值:    printf("nNumber is equal to : %d\n", nNumber);    // 现在,通过pPointer来控制nNumber:    *pPointer = 25;    // 证明经过上面的代码之后,nNumber的值已经改变了:    printf("nNumber is equal to : %d\n", nNumber);    }   请通读并编译以上代码,并确信你已经弄懂了它是如何工作的。然后,当你准备好了以后,就往下读吧!  陷阱!  看看你是否能指出以下程序的缺陷:   #include   int *pPointer;   void SomeFunction()   {    int nNumber;    nNumber = 25;    // 使pPointer指向nNumber:    pPointer = &nNumber;   }   void main()   {    SomeFunction(); // 让pPointer指向某些东西    // 为什么这样会失败?    printf("Value of *pPointer: %d\n", *pPointer);   }   这个程序首先调用SomeFunction函数,在其中创建了一个名为nNumber的变量,并且使pPointer指向这个变量。那么,这就是问题之所在了。当函数结束的时候,由于nNumber是一个本地变量,那么它就会被销毁。这是因为当语句块结束的时候,块中定义的本地变量都会被销毁。这就意味着当SomeFunction返回到main()的时候,那个变量就已经被销毁了,所以pPointer将会指向一个不再属于本程序的内存位置。如果你不懂这一点,那么你应该去读一读有关本地变量、全局变量以及作用域的东西,这些概念非常重要。   那么,如何解决这个问题呢?答案是使用一种名为动态分配的技术。请注意:在这一点上,C和C 是不同的。既然大多数开发者正在使用C ,那么下面的代码就使用C 来编写。共5页。 1 2 3 4 5 :   何为指针?   指针基本上和其它的变量一样,唯一的一点不同就是指针并不包含实际的数据,而是包含了一个指向内存位置的地址,你可以在这个地址找到某些信息。这是一个很重要的概念,并且许多程序或者思想都是将指针作为它们的设计基础,例如链表。  开始  如何定义一个指针?呃,就像定义其它的变量一样,不过你还需要在变量名之前添加一个星号。例如,下面的代码创建了两个指向整数的指针:   int* pNumberOne;   int* pNumberTwo;   注意到变量名的前缀“p”了吗?这是编写代码的一个习惯,用来表示这个变量是一个指针。   现在,让我们把这些指针指向一些实际的值吧:   pNumberOne = &some_number;   pNumberTwo = &some_other_number;   “&”标志应该读作“the address of(……的地址)”,它的作用是返回一个变量的内存地址,而不是这个变量本身。那么在这个例子中,pNumberOne就是some_number的地址,亦称作pNumberOne指向some_number。   现在,如果我们想使用some_number的地址的话,那么我们就可以使用pNumberOne了。如果我们希望经由pNumberOne而使用some_number的值的话,我们可以用*pNumberOne。“*”应该读作“the memory location pointed to by(由……指向的内存位置)”,它用来取得指针所指向的值。不过指针声明的情况例外,如“int *pNumber”。  到现在都学到什么了(一个例子):  咻!要理解的东西太多了,所以在此我建议,如果你还是不理解以上的概念的话,那么最好再通读一遍;指针是一个复杂的主题,要掌握它是要花些时间的。   这里有一个示例,解说了上面讨论的那些概念。它是由C编写成,并不带有C 的那些扩展。   #include   void main()   {   // 声明变量:    int nNumber;    int *pPointer;    // 现在,给它们赋值:    nNumber = 15;    pPointer = &nNumber;    // 打印nNumber的值:    printf("nNumber is equal to : %d\n", nNumber);    // 现在,通过pPointer来控制nNumber:    *pPointer = 25;    // 证明经过上面的代码之后,nNumber的值已经改变了:    printf("nNumber is equal to : %d\n", nNumber);    }   请通读并编译以上代码,并确信你已经弄懂了它是如何工作的。然后,当你准备好了以后,就往下读吧!  陷阱!  看看你是否能指出以下程序的缺陷:   #include   int *pPointer;   void SomeFunction()   {    int nNumber;    nNumber = 25;    // 使pPointer指向nNumber:    pPointer = &nNumber;   }   void main()   {    SomeFunction(); // 让pPointer指向某些东西    // 为什么这样会失败?    printf("Value of *pPointer: %d\n", *pPointer);   }   这个程序首先调用SomeFunction函数,在其中创建了一个名为nNumber的变量,并且使pPointer指向这个变量。那么,这就是问题之所在了。当函数结束的时候,由于nNumber是一个本地变量,那么它就会被销毁。这是因为当语句块结束的时候,块中定义的本地变量都会被销毁。这就意味着当SomeFunction返回到main()的时候,那个变量就已经被销毁了,所以pPointer将会指向一个不再属于本程序的内存位置。如果你不懂这一点,那么你应该去读一读有关本地变量、全局变量以及作用域的东西,这些概念非常重要。   那么,如何解决这个问题呢?答案是使用一种名为动态分配的技术。请注意:在这一点上,C和C 是不同的。既然大多数开发者正在使用C ,那么下面的代码就使用C 来编写。共5页。 1 2 3 4 5 : 下载本文示例代码


Visual C 初学者指针学习指南Visual C 初学者指针学习指南Visual C 初学者指针学习指南Visual C 初学者指针学习指南Visual C 初学者指针学习指南Visual C 初学者指针学习指南Visual C 初学者指针学习指南Visual C 初学者指针学习指南Visual C 初学者指针学习指南Visual C 初学者指针学习指南Visual C 初学者指针学习指南Visual C 初学者指针学习指南Visual C 初学者指针学习指南Visual C 初学者指针学习指南Visual C 初学者指针学习指南
阅读(89) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~