一个变量在内存中所占用存储单元的地址被称为该变量的指针。即“指针”仅表示对象在内存中的地址。
计算机中,内存是一个连续编号或编址的空间。
每个存储单元都有一个固定的编号,编号称之为地址。
不同的数据类型占用不同字节的存储空间,而每个字节都有一个地址,一般把每个数据的首字节地址称为该数据的地址。
(1)指针变量的赋值
int a;
int *p = &a;
( 2 )把一个变量的地址赋给与其具有相同数据类型的指针变量。
int ,*p;
p = &a; /把整型变量数据 a的地址赋予整型指针变量p/
(3)具有两个相同数据类型的两个指针变量也可以相互赋值。
int a,*pa,*pb;
pa = &a;
pb = pa;
( 4 )把数组的首地址赋予给与其具有相同数据类型的指针变量。
int a[5],*p;
p = a; /把a的地址赋予给与其具有相同数据类型的指针变量/
也可以写为 : p = &a[0]; /数组的第一个元素的地址也是整个数组的首地址/
(5)把字符串的首地址赋予字符型指针变量。
char *pc =;
pc = “C Langage”;
抑或是: char *pc = “C langage”;
***指针变量作函数参数
C语言程序中的函数调用是按“值传递”方式传递。
值传递有两种:数据复制,地址复制。
指针变量的值是一个地址值,指针变量作参数就是在函数间传递变量的地址。
#include<stdio.h>
swap(int *a,int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp; //使指针变量a和b所指向的目标变量x,y的值互换。
printf("\n *a=%d *b=%d",*a,*b);
}
main()
{
int x,y;
int *p1,*p2;
printf(“please enter x and y:”);
scanf("%d %d",&x,&y);
printf("\n x=%d",&x,&y);
p1 = &x;
p2 = &y;
swap(p1,p2);
printf("\n x=%d y=%d\n",x,y);
}
实参p1,p2 的值传递给形参 a,b。
形参a的值为&x, b的值为&y。
看另外一个例子:
swap(int *a,int *b)
{
//仅使 a,b的值互换,并没有使指针变量 a,b指向的目标变量x,y的值互换。
int *temp;
temp = a;
a = b;
b = temp;
printf("\n *a=%d *b=%d,*a,*b");
}
返回值为指针 ——指针型函数
所谓函数类型是指函数返回值的类型。函数不仅可以返回一个整型值,字符值、实型值,也可以返回一个指针型的数值。
EG:
#include<stdio.h>
main()
{
int code;
char *w,*day_name();
printf(“Input Day No:”);
scanf("%d",&code);
printf("%d",&code);
w = day_name(code);
printf(“Today is %s\n”,w);
}
char *day_name(int n)
{
static char *name[] = { “Illegal day”,“Monday”,“Tuesday”,“Wednesday”,“Thursday”,“Friday”,“Saturday”,“Sunday”};
if(n<1 || n>7)
return (name[0]);
else
return (name[n]);
}