#include<stdio.h> intmain() { int var = 20; /* 实际变量的声明 */ 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 ); //20 return0; }
#include<stdio.h> constint MAX = 3; intmain() { int var[] = {10, 100, 200}; int i, *ptr; /* 指针中第一个元素的地址 */ ptr = var; i = 0; while ( ptr <= &var[MAX - 1] ) { printf("Address of var[%d] = %p\n", i, ptr ); printf("Value of var[%d] = %d\n", i, *ptr ); /* 指向上一个位置 */ ptr++; i++; } return0; } ---------------- Address of var[0] = bfdbcb20 Value of var[0] = 10 Address of var[1] = bfdbcb24 Value of var[1] = 100 Address of var[2] = bfdbcb28 Value of var[2] = 200
指针数组
一个指向整数的指针数组的声明:
1
int *ptr[MAX];
在这里,把 ptr 声明为一个数组,由 MAX 个整数指针组成。因此,ptr 中的每个元素,都是一个指向 int 值的指针。下面的实例用到了三个整数,它们将存储在一个指针数组中,如下所示:
#include<stdio.h> constint MAX = 3; intmain() { int var[] = {10, 100, 200}; int i, *ptr[MAX]; for ( i = 0; i < MAX; i++) { ptr[i] = &var[i]; /* 赋值为整数的地址 */ } for ( i = 0; i < MAX; i++) { printf("Value of var[%d] = %d\n", i, *ptr[i] ); } return0; } ------ Value of var[0] = 10 Value of var[1] = 100 Value of var[2] = 200
#include<stdio.h> constint MAX = 4; intmain() { constchar *names[] = { "Zara Ali", "Hina Ali", "Nuha Ali", "Sara Ali", }; int i = 0; for ( i = 0; i < MAX; i++) { printf("Value of names[%d] = %s\n", i, names[i] ); } return0; } ------ Value of names[0] = Zara Ali Value of names[1] = Hina Ali Value of names[2] = Nuha Ali Value of names[3] = Sara Ali
#include<stdio.h> intmain() { int var; int *ptr; int **pptr;
var = 3000;
/* 获取 var 的地址 */ ptr = &var;
/* 使用运算符 & 获取 ptr 的地址 */ pptr = &ptr;
/* 使用 pptr 获取值 */ printf("Value of var = %d\n", var ); printf("Value available at *ptr = %d\n", *ptr ); printf("Value available at **pptr = %d\n", **pptr);
return0; } ------------------- Value of var = 3000 Value available at *ptr = 3000 Value available at **pptr = 3000
指针数组和数组指针
1 2
int *p1[5] ----------指针数组 int (*p2)[5]---------数组指针
指针数组是一个数组,每个数组元素存放一个指针变量。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
#include<stdio.h>
intmain() { //指针数组,里面存的是指针 char *p1[5] = {"wo", "jiao", "Kayleh", "!"}; int i; for (i = 0; i < 5; i++) { /* code */ // %s会取地址对应的值,char形是特列,通过字符串首地址输出字符串 printf("%s\n", p1[i]); } }
数组指针是一个指针,它指向的是一个数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
#include<stdio.h> intmain() { int temp[5] = {1, 2, 3, 4, 5}; //&temp表示取出整个数组的地址 //temp表示数组的第一个元素的地址 int(*p2)[5] = &temp; int i; for (i = 0; i < 5; i++) { /* code */ //内部的*取得是数组的,外部的取得是数组元素的 printf("%d\n", *(*p2 + i)); } return0; }
doublegetAverage(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