C语言学习:指针

1. 指针

指针本质上就是内存地址。

int a = 10;    // 定义一个整型变量
int *p = &a;    // 定义一个指针变量,指向a的地址

在这个例子中:

  • a 是一个普通的整型变量,值为10
  • &a 获取变量a的内存地址
  • p 是一个指针变量,存储了a的地址
  • *p 可以访问a中存储的值

2. 指针的定义语法

指针的定义遵循以下格式:

基类型 * 指针变量名;

这里的基类型决定了指针指向的数据类型。例如:

int *p;      // 指向整型的指针
char *p;    // 指向字符型的指针

3. 指针操作符

在指针操作中,有两个关键的操作符:

  1. & (取地址操作符):获取变量的内存地址
  2. * (解引用操作符):访问指针指向的内存空间中的值

例:

int a = 10;
int* p = &a;    // p获取a的地址
printf("a的值:%d\n", *p);    // 通过解引用访问a的值

4. 指针的核心应用

4.1 函数参数传递

指针最常用的场景之一是在函数间传递参数:

void swap(int* a, int* b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

int main() {
    int a = 10, b = 20;
    swap(&a, &b);    // 传递变量地址
    return 0;
}

4.2 数组操作

指针和数组有着密切的关系:

int a[5] = {1, 2, 3, 4, 5};
int *p = a;    // 数组名表示首元素地址

// 通过指针遍历数组
for(int i = 0; i < 5; i++) {
    printf("%d ", *(p + i));    // 等价于 a[i]
}

5. 指针运算

指针支持多种运算操作:

  1. 指针加减整数:
int *p = a;
p + 1;    // 移动到下一个元素
p - 1;    // 移动到上一个元素
  1. 指针递增递减:
p++;    // 移动到下一个元素
p--;    // 移动到上一个元素
  1. 指针比较:
if(p1 < p2) {    // 比较两个指针的地址
    // 操作
}

6.实例

#include 

void printArray(int *begin,int *end) 
{	
	while (begin <= end) 
	{
	printf("%d ",*begin);
	begin++;
	}
	putchar('\n');
}

void selectionSort(int *begin,int *end) 
{
	for (int *i = begin; i < end; ++i) 
	{
		for (int *j = i+1; j <= end; ++j)
		{
			if (*i > *j) 
			{
				int temp = *i;
				*i = *j;
				*j = temp;
			}
		}
	}
}

void bubbleSort(int *begin,int *end) 
{
	for (int *i = begin; i < end; ++i)
	{
		for (int *j = begin; j < begin+(end-i); ++j)
		{
			if (*j > *(j+1))
			{
				int temp = *j;
				*j = *(j+1);
				*(j+1) = temp;
			}
		}
	}
}

void insertionSort(int *begin,int *end) 
{
	for (int *i = begin+1; i <= end; ++i)
	{
		int temp = *i;
		int *j = i;
		while (j > begin && temp < *(j-1))
		{
			*j = *(j-1);
			--j;
		}
		*j = temp;
	}
}

int search(int n,int *begin,int *end)
{
	while (begin <= end)
	{
		int *mid = begin + (end - begin)/2;
		if (*mid > n)
		{
			end = mid -1;
		}else if (*mid < n)
		{
			begin = mid + 1;
		}else
		{
			return 1;
		}
	}
	if (begin > end)
	{
		return 0;
	}
}

int	main() 
{
	int a[10] = {9,5,2,10,7,1,6,3,4,8};
	//selectionSort(a,a+9);
	//bubbleSort(a,a+9);
	insertionSort(a,a+9);
#if 0
	int n;
	printf("input num to search: ");
	scanf("%d",&n);
	if (search(n,a,a+9))
	{
		printf("found it\n");	
	}else
	{
		printf("not found\n");
	}
#endif
	printArray(a,a+9);
	return 0;
}

你可能感兴趣的:(Linux编程,嵌入式,学习日记,c语言,学习,开发语言)