1. int main()
{
int a=3,*p;
p=&a; /* 把变量a的地址赋值给指针p,即p指向a */
printf("a=%d,*p=%d\n",a,*p); (a=3,*p=3)
*p=10; /* 对指针p所指向的变量赋值,相当于对变量a赋值 */
printf("a=%d,*p=%d\n",a,*p); (a=10,*p=10)
scanf("%d",&a); (eg:输入5)
printf("a=%d,*p=%d\n",a,*p); (a=5,*p=5)
(*p)++; /* 将指针所指向的变量加1 */
printf("a=%d,*p=%d\n",a,*p); (a=6,*p=6)
return 0;
}
PS. 输出地址:%p
2.int *ip;
ip=&var; /* 在指针变量中存储 var 的地址 */
printf("Address of var variable: %p\n", &var ); /* 在指针变量中存储的地址 输出地址 */
printf("Address stored in ip variable: %p\n", ip ); /* 输出地址 */
printf("Value of *ip variable: %d\n", *ip ); /* 使用指针访问值 输出值 */
3.int var[]={1,2,3};
int *ptr;
ptr=var; /* 递增一个指针时 指针中的数组地址 */
(递增一个指针另一种写法while(ptr<=&var[max-1]))
ptr=&var[max-1];/* 递减一个指针时 指针中的数组地址 */
4.指针数组
int *ptr[max],var[]={1,2,3};
for(i=0;i<n;i++)
{
ptr[i]=&var[i]; /* 赋值为整数的地址 */
}
5.指向指针的指针
int *ptr;
int **pptr; /*当一个目标值被一个指针间接指向到另一个指针时,访问这个值时需要使用两个星号运算符 */
ptr=&var; /* 获取var的地址 */
pptr=&ptr; /* 使用运算符 & 获取 ptr 的地址 */
printf("**pptr = %d\n",**pptr); /* 输出 */
6.传递指针给函数
C 语言允许您传递指针给函数,只需要简单地声明函数参数为指针类型即可。
下面的实例中,我们传递一个无符号的 long 型指针给函数,并在函数内改变这个值:
#include <stdio.h> #include <time.h> void getSeconds(unsigned long *par); int main () { unsigned long sec; getSeconds( &sec ); /* 输出实际值 */ printf("Number of seconds: %ld\n", sec ); return 0; } void getSeconds(unsigned long *par) { /* 获取当前的秒数 */ *par = time( NULL ); return; }
当上面的代码被编译和执行时,它会产生下列结果:
Number of seconds :1294450468
能接受指针作为参数的函数,也能接受数组作为参数,如下所示:
#include <stdio.h> /* 函数声明 */ double getAverage(int *arr, int size); int main () { /* 带有 5 个元素的整型数组 */ int balance[5] = {1000, 2, 3, 17, 50}; double avg; /* 传递一个指向数组的指针作为参数 */ avg = getAverage( balance, 5 ) ; /* 输出返回值 */ printf("Average value is: %f\n", avg ); return 0; } double getAverage(int *arr, int size) { int i, sum = 0; double avg; for (i = 0; i < size; ++i) { sum += arr[i]; } avg = (double)sum / size; return avg; }
当上面的代码被编译和执行时,它会产生下列结果:
Average value is: 214.40000
7.从函数返回指针
从函数返回指针必须声明一个返回指针的函数
int *function()
{
……
}
另外,C 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量。
现在,让我们来看下面的函数,它会生成 10 个随机数,并使用表示指针的数组名(即第一个数组元素的地址)来返回它们,具体如下:
#include <stdio.h> #include <time.h> #include <stdlib.h> /* 要生成和返回随机数的函数 */ int * getRandom( ) { static int r[10]; int i; /* 设置种子 */ srand( (unsigned)time( NULL ) ); for ( i = 0; i < 10; ++i) { r[i] = rand(); printf("%d\n", r[i] ); } return r; } /* 要调用上面定义函数的主函数 */ int main () { /* 一个指向整数的指针 */ int *p; int i; p = getRandom(); for ( i = 0; i < 10; i++ ) { printf("*(p + [%d]) : %d\n", i, *(p + i) ); } return 0; }