C语言之指针学习笔记

1、什么是指针?

存放地址的变量叫指针。

2、为什么要定义指针类型?

不同类型的指针的大小不同,定义指针类型是为了使系统知道该指针指向的内容占用多少字节。

3、指针包含两个方面:起始地址编号和存储类型(长度)

4、数组传参的两种等价形式

fun(int arr[]) 和 fun(int *arr) 都表示函数的参数类型为int arr[]。(有人说int arr[]和int *arr不能混为一谈,这里不做论述,只需要知道对于初学者来说编译能通过,能帮助理解就足够了)

例题:将数组a中n个整数按相反顺序存放

#include<stdio.h>

void reverse(int*, int);

int main()
{
  int n = 6;
  int arr[] = {1,2,3,4,5,6};
  reverse(arr, n);
  	
  for(int *p=arr, i=0; i<n p++, i++)
  {
  	printf("%d ", *p);
  }
}

void reverse(int* arr, int n)
{
	int t;
	for(int i=0, j=n-1; i<n/2; i++, j--)
	{
		t = arr[i];
		arr[i] = arr[j];
		arr[j] = t;
	}
} 

例题:冒泡排序

#include<stdio.h>
void sort(int*, int);
int main()
{
	int n=6;
	int arr[]={4,4,2,5,7,3};
	sort(arr, n);
	for(int i=0; i<n; i++)
	{
		printf("%d ", arr[i]);
	} 
} 

void sort(int *arr, int n)
{
	int t;
	for(int i=0; i<n-1; i++)
	{
		for(int j=0; j<n-i-1; j++)
		{
			if(arr[j]>arr[j+1])
			{
				t=arr[j+1];
				arr[j+1]=arr[j];
				arr[j]=t;
			}
		}
		
	}
}

5、字符指针变量和字符数组的一些区别

chart arr[] = {a,b,c}, chart *p = "abc"

字符数组由若干个元素组成,一个元素存放一个字符。而字符指针存放的是一个地址

可以对指针变量赋值,但不能对数组名(数组名是地址,是常量)赋值,arr="aaa"错误,p="aaa"正确

arr[1] = d,正确。p[1] = d,错误

arr不可以用%s输出,p可以


6、指针的形式输出数组



7、通过指针变量访问它所指向的函数

int max(int x, int y)
{
  return x>y?x:y;
}
int main()
{
    int (*p)(int x, inty);
    p = max(1,2);	//类型名 (*指针变量名)(参数列表)
    printf("%d",p);
}



指向函数的指针也可以作为参数传入另一个函数



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值