- 指针变量的定义与初始化
- 指针变量的引用
-
指针变量的运算
-
指针变量与一维字符数组
-
指针变量与二维数组
前言
因为指针变量也是一个变量,所以编译系统也为它分配一个内存空间,大小一般为4或8个字节。与一般变量一样,它也有地址值,用取地址符&也可得到它的地址。
一、指针变量的定义与初始化
定义一个简单指针变量的格式如下。
类型说明符 *指针变量名;
#includeint main(void) { int a; int *p=&a; printf("%ld ,%ldn", &a,p); //输出变量a的地址值和p的值。 return 0; }
二、指针变量的引用
#includeint main(void) { float *pointer=0,a=100,b=0; printf("last= %f %fn", a,b); pointer=&a; //把变量a的地址赋给指针变量pointer *pointer=50.0f; //把50.0f赋给pointer指向的空间 b=*pointer; //从pointer指向的空间中取值,然后赋给变量b printf("last= %f %fn", a,b); return 0; }
有两个float型数据a,b,通过指针的方式把它们互换。
#include三、指针变量的运算int main(void) { float a=4.3,b=6.5,temp=0,*p1=0,*p2=0; p1=&a; //两个地址指向的数据类型一致,可以赋值。 p2=&b; temp=*p1; //把p1指向的变量值赋给temp。 *p1=*p2; //把p2指向的变量值赋给p1指向的变量。 *p2=temp; //把temp赋给p2指向的变量。 printf("a=%2.1f,b=%2.1f n",a,b); return 0; }
#includeint main(void) { int *p,a=5; p=&a; //p的值赋成&a,p指向变量a。 printf("p=%ldn",p); //输出当前p的值。 p=p+1; printf("p=%ldn",p); return 0; }
这里的p=p+1;执行后,p的值加一个p指向数据类型占用的字节数。因为这里p指向一个int型数据,一个int型数据在本次使用的编译器中占4个字节,所以+1时一次就加了4。
四,指针变量与一维字符数组一个由小写英文字母组成的字符串存放在了一个维字符数组str中,用循环把每个小写字母改成大写,最后输出修改后的字符串
#include五,指针变量与二维数组int main(void) { char str[10]="abcdef"; char *ch=str; //定义一个指向char型的指针变量ch,初始化为 //字符数组的第0个字符地址。 for(;*ch!=' ';ch++) //ch++后ch的值变化,ch指向下一个字符。 { printf("%c",*ch); //*ch获取内存地址为ch处的数据。 *ch=*ch-32; //把*ch的值改成大写字母后赋给*ch。 } printf("n%sn",str); return 0; }
C语言标准规定,类型和元素个数不同的一维数组属于不同的数据类型。如图int a[2][3]={{1,2,3},{4,5,6}};此时a的值是首元素的地址,它指向的数据类型是具有3个int型数据的一维数组,标准数据类型写法是int[3]。
写一个程序,用指针把一个二维数组中的变量值全部输出出来。
#includeint main(void) { int a[2][3]={{1,2,3},{4,5,6}}; for(int i=0;i<2;i++) { for(int j=0;j<3;j++) //输出一行的数据。 printf("%d ",*(*(a+i)+j)); printf("n"); } return 0; }



