C语言指针概述。

说简单直白一点 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;
}

猜你喜欢

转载自blog.csdn.net/oXunWuQiShi1/article/details/81812076