C入门系列:第一章 基本类型
C入门系列:第二章 字符串
C入门系列:第三章 函数
C入门系列:第四章 数组和指针
C入门系列:第五章 数据存储类别和内存管理
C入门系列:第六章 文件输入/输出
C入门系列:第七章 结构和其他数据形式
C入门系列:第八章 C预处理器和C库
声明指针变量时必须指定指针所指向变量的类型,因为不同的变量类型占用不同的存储空间,一些指针操作要求知道操作对象的大小。
int *pi; char *pc; float *pf; 指针的简单理解: 可以将int *pi分成三部分看 pi:代表指针,赋值的话要提供一个地址,查找地址通过&运算符,即pi = &pooh; *pi:代表int类型的变量,赋值的话要提供一个值,即*pi = 24; int *pi:代表指针变量类型说明符表明了指针所指向对象的类型,星号(*)表明声明的变量是一个指针。int *pi声明表示pi是一个指针,*pi是int类型。
#include<stdio.h> void interchange(int *u, int *v); int main(void) { int x = 5, y = 10; printf("Orignially x = %d and y = %d\n", x, y); interchange(&x, &y); // 将x和y的地址传给方法指针形参 printf("Now x = %d and y = %d\n", x, y); return 0; } void interchange(int *u, int *v) { int temp; temp = *u; *u = *v; *v = temp; }为何需要声明指针的类型?
#include<stdio.h> #define SIZE 4 int main(void) { short dates[SIZE]; short *pti; short index; double bills[SIZE]; double *ptf; pti = dates; // 指向数组第一个元素的地址 ptf = bills; // pti+index:*pti是short类型,short类型占用2个字节,pti指针+1表示增加一个存储单元,每次增加2个字节地址 // ptf+index:*ptf是double类型,double类型占用8个字节,每次增加8个字节地址 // 如果不声明指针类型,就无法知道增加的字节地址 for (index = 0; index < SIZE; index++) { printf("i=%d,p,p", index, pti+index, ptf+index); } return 0; }只有在函数原型或函数定义头中,才可以用int arr[]代替int *arr。
int arr[]和int *arr都表示arr是一个指向int的指针
下面的函数原型声明是等价的: int sum(int arr[], int n); int sum(int *arr, int n);获取数组元素之和的两种方式
#include<stdio.h> #define SIZE 5 int sum1(int arr[], int n); int sum2(int *start, int *addr); int main(void) { int marbles[SIZE] = {20, 10, 5, 39, 4}; long answer; answer = sum1(marbles, SIZE); answer = sum2(marbles, marbles + SIZE); printf("%d", answer); return 0; } // 数组形参函数 int sum1(int arr[], int n) { int total; for (int i = 0; i < n; i++) { total += arr[i]; } return total; } // 指针形参函数 int sum2(int *start, int *addr) { int total; while (start < end) { total += *start; start++; } return total; }