这种变量就称为指针变量。指针变量也分别有不同的类型,用来保存不同类型变量的地址。
严格地说.指针与指针变量是不同的,为了叙述方便,常常把指针变量就称为指针。
内存是计算机用于存储数据的存储器,以字节作为存储单元.为了能正确的访问内存单
元,必须为每一个内存单元编号,这个编号就称为该单元的地址。如果将一个旅店比喻成内
存,则旅店的房间就是内存单元,房间号码就是该单元的地址。
指针变量定义格式:
[存储类型]
数据类型
*指针变量名[=初始值]
指针变量一旦定义,必须采用赋值的方式将其与某个变量实体相联系,才能使用。指针
变量的赋值方式:
指针变量名;&普通变量名;
1、指针的概念指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让我们分别说明。
先声明几个指针放着做例子:
例一:
(1)int*ptr
(2)char*ptr
(3)int**ptr
(4)int(*ptr)[3]
(5)int*(*ptr)[4]
1、指针的类型
从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。这是指针本身所具有的类型。让我们看看例一中各个指针的类型:
(1)int*ptr
//指针的类型是int*
(2)char*ptr
//指针的类型是char*
(3)int**ptr
//指针的类型是int**
(4)int(*ptr)[3]
//指针的类型是int(*)[3]
(5)int*(*ptr)[4]
//指针的类型是int*(*)[4]
怎么样?找出指针的类型的方法是不是很简单?
2、指针所指向的类型
当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当做什么来看待。
从语法上看,你只须把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型。例如:
(1)int*ptr
//指针所指向的类型是int
(2)char*ptr
//指针所指向的的类型是char
(3)int**ptr
//指针所指向的的类型是int*
(4)int(*ptr)[3]
//指针所指向的的类型是int()[3]
(5)int*(*ptr)[4]
//指针所指向的的类型是int*()[4]
在指针的算术运算中,指针所指向的类型有很大的作用。指针的类型(即指针本身的类型)和指针所指向的类型是两个概念。当你对C越来越熟悉时,你会发现,把与指针搅和在一起的"类型"这个概念分成"指针的类型"和"指针所指向的类型"两个概念,是精通指针的关键点之一。
本篇文章来源于 黑基网-中国最大的网络安全站点 原文链接:http://www.hackbase.com/lib/2008-03-09/13993.html
在你提供的代码上进行了增加,我感觉你们老师可能是想让你们把指针用在数组上吧,对于一个指向数组的指针p,p++指向数组的下一个元素。此外,使用指针可以很好的提升代码执行效率。有问题可以互相交流。#include <stdio.h>
#include <stdlib.h>
int square(int a, int b)
{
return a*b
}
int main()
{
int i, j, l, w, s = 0, number = 1, max
int *length = &l, *width = &w, *p = &i
printf("请输入您所需测量田地的数量: \n")
scanf("%d",p)
int a[*p]
int *y = a
for(j = 0j <*pj++)
{
printf("请输入第%d块田的长和宽: \n", j+1)
scanf("%d %d",length,width)
*(y+j) = square(*length, *width)
s = s + *(y+j)
max = *y
if( *(y+j) >max)
{
max = *(y+j)
number = j+1
}
}
for(j = 0j <*pj++)
{
printf("您第%d块田的面积为%d:\n",j+1,*(y+j))
}
printf("您的田地总面积为: %d \n", s)
printf("您最大面积一块第为第%d块,面积为%d !!!", number, max)
return 0
}