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); }
指向函数的指针也可以作为参数传入另一个函数