您的位置:首页 > 编程语言 > C语言/C++

C语言之指针学习笔记

2018-01-16 18:12 246 查看
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);
}



指向函数的指针也可以作为参数传入另一个函数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  谭浩强 指针 C语言