说简单直白一点 C语言中的指针就是地址,不过也有不少表达方式,每一个变量对应一个地址等价于每一个变量对应一个指针,存放变量地址的变量就成为指针变量。一般采用:类型说明符 *变量名,比如 int *ptr_num.
下面我用三只表达方式来说明指针,以便更加易懂。
第一中样式:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int array [] = {15, 20, 25, 30, 35};
int i; //定义一个整形变量i
int *ptr_array = array;//将数组的元素的地址赋值给我们定义好的指针
//每一个数组的名称就是这个数组的起始地址。
for (i = 0; i < 5; i++){
printf("第%d个元素的值为%d\t,地址为:%p\n", i+1, ptr_array[i], &ptr_array[i]);
// 指针ptr_array[i]这个等价于数组array[i],在此之前已经把变量的值与地址值赋予完毕。
// & ptr_array[i]的意思是每个数组变量相对应的地址,在printf函数里应该与%p对应使用。
}
return 0;
}
第二种样式:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int array [] = {15, 20, 25, 30, 35};
int i; //定义一个整形变量i
int *ptr_array = array;//将数组的元素的地址赋值给我们定义好的指针
//每一个数组的名称就是这个数组的起始地址。
for (i = 0; i < 5; i++){
printf("第%d个元素的值为%d\t,地址为:%p\n", i+1, *(ptr_array+i), &ptr_array[i]);
// *(ptr_array+i)代表的意思是对应数组的变量。
//同理如果要把数组的某一个值赋给指针变量也可以这么表示:* ptr_array = array[i]
//这种方式简单易懂。较为常用
}
return 0;
}
第三种样式:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int array [] = {15, 20, 25, 30, 35};
int i; //定义一个整形变量i
int *ptr_array = array;//将数组的元素的地址赋值给我们定义好的指针
//每一个数组的名称就是这个数组的起始地址。
for (i = 0; i < 5; i++){
printf("第%d个元素的值为%d\t,地址为:%p\n", i+1, *ptr_array, ptr_array);
ptr_array++;// 这种方法慎用。 移动类型的指针。
}
return 0;
}
下面是一例数组变换顺序的程序:
#include<stdio.h>
#include<stdlib.h>
#define N 5 //定义个N为5的值
int main()
{
int array [] = {15, 20, 25, 30, 35};
int i; //定义一个整形变量i
int temp;//临时变量。
for (i = 0; i < N/2; i++){
temp = array[i];
array[i] = array[N - i - 1 ] ;
array[N - i - 1] = temp;
//第i个值与第N-i-1个值交换。
}
printf("\n");
for (i = 0; i < N; i++){
printf("%d\t", *(array + i)); //*(array + i)表示的是指针变量相对应的变量。
}
return 0;
}
下面使用指针来进行数组交换顺序:
#include<stdio.h>
#include<stdlib.h>
#define N 5 //定义个N为5的值
int main()
{
int array [] = {15, 20, 25, 30, 35};
int i; //定义一个整形变量i
int temp;//临时变量。
int *ptr_array_start = array;
int *ptr_array_end = array + 4;//=array + N - 1
while ( ptr_array_end != ptr_array_start ){
temp = *ptr_array_start;
*ptr_array_start = *ptr_array_end;
*ptr_array_end = temp; //对应数组首尾两个地址进行交换位置 ,指针进行更新。
*ptr_array_start ++; //指针向后走一位。
*ptr_array_end --; //指针向前走一位。
}
printf("\n");
for (i = 0; i < N; i++){
printf("%d\t", *(array + i)); //*(array + i)表示的是指针变量相对应的变量。
}
return 0;
}