文章目录
- 前言
- 1.指针和指针变量
- 2.const修饰
- 2.1.const int* p 修饰的是指针指向的内容,保证指针指向的内容不能通过指针来改变。但是指针变量本⾝的内容可变。
- 2.2 int const *p
- 2.3 int *const p
- 2.4 const int* const p
- 3. 指针数组(array of pointers)
- 4.数组指针(array pointer)
- 5.字符数组
前言
前面我们有5篇进行了对指针的讲解,下面进行对指针的总结与归纳
1.指针和指针变量
记住:内存单元的编号 == 地址 == 指针
指针变量是一个变量用来存储地址的
2.const修饰
const修饰指针变量有三种形式
2.1.const int* p 修饰的是指针指向的内容,保证指针指向的内容不能通过指针来改变。但是指针变量本⾝的内容可变。
int main()
{
int a = 10;
int b = 20;
const int* pa = &a;
pa = &b;
*pa = 20;
return 0;
}
2.2 int const *p
2.2.int const *p跟const int * p一样
int main()
{
int a = 10;
int b = 20;
int const * pa = &a;
pa = &b;
*pa = 20;
return 0;
}
2.3 int *const p
2.3.int * const p const如果放在*的右边,修饰的是指针变量本⾝,
保证了指针变量的内容不能修改,但是指针指向的内容,可以通过指针改变。
int main()
{
int a = 10;
int b = 20;
int* cosnt pa = &a;
pa = &b;
*pa = 20;
return 0;
}
2.4 const int* const p
都有限制
int main()
{
int a = 10;
int b = 20;
const int* const pa = &a;
pa = &b;
*pa = 20;
return 0;
}
结论:
- const如果放在*的左边,修
饰的是指针指向的内容,保证指针指向的内容不能通过指针来改变。
但是指针变量本⾝的内容可变。 - const如果放在*的右边,修饰的是指针变量本⾝,保证了指针变量的内容不能修改,但是指针指向的内容,可以通过指针改变。
3. 指针数组(array of pointers)
整形数组顾名思义就是存放整数的数组,
那么指针数组就是存放指针的数组。
#include<stdio.h>
int main()
{
int arr1[] = { 1,2,3,4,5 };
int arr2[] = { 2,3,4,5,6 };
int arr3[] = { 3,4,5,6,7 };
//数组名代表首元素地址
int* arr[] = { arr1,arr2,arr3 };//数组指针
return 0;
}
__
4.数组指针(array pointer)
#include<stdio.h>
void test(int(*p)[5], int row, int col)
{
int i = 0;
int j = 0;
for (i = 0; i < row; i++)
{
for (j = 0; j < col; j++)
{
printf("%d ", *(*(p + i) + j));
}
printf("\n");
}
}
int main()
{
int arr[3][5] = {
{1,2,3,4,5},
{2,3,4,5,6},
{3,4,5,6,7}
};
int(*p)[5] = arr;//数组指针
test(p, 3, 5);
return 0;
}
5.字符数组
#include<stdio.h>
int main()
{
const char* pstr = "hello world.";//常量字符串,pstr是第一个字符的地址
printf("%s\n", pstr);
return 0;
}
完