目录:
1.指针数组
2.指针数组模拟二维数组
3.字符指针变量
4.数组指针变量
1.指针数组
首先我们需要明确指针数组究竟是指针还是数组?
指针数组是存放指针的数组,我们可以类比整型数组和字符数组
如图所示
指针数组的每个元素都是地址,又可以指向一块区域。
2.指针数组模拟二维数组
#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*的,就可以存放在parr数组中
int* parr[3] = {arr1, arr2, arr3};
int i = 0;
int j = 0;
for(i=0; i<3; i++)
{
for(j=0; j<5; j++)
{
printf("%d ", parr[i][j]);
}
printf("\n");
}
return 0;
}
parr[i]是访问parr数组的元素,parr[i]找到的数组元素指向了整型⼀维数组,parr[i][j]就是整型⼀维数
组中的元素。
图画演示如下
3.字符指针变量
字符指针的表达形式
int main()//代码1
{
char ch = 'w';
char *pc = &ch;
*pc = 'w';
return 0;
}
int main()//代码2
{
const char* pstr = "hello bit.";//这⾥是把⼀个字符串放到pstr指针变量⾥了吗? 本质只是把首元素的地址放进了字符指针里
printf("%s\n", pstr);
return 0;
}
由于常量字符串不能被修改,所以相当于const char* p类似于代码2
下面来看一道题目,请写出代码的运行结果
#include <stdio.h>
int main()
{
char str1[] = "hello bit.";
char str2[] = "hello bit.";
const char *str3 = "hello bit.";
const char *str4 = "hello bit.";
if(str1 ==str2)
printf("str1 and str2 are same\n");
else
printf("str1 and str2 are not same\n");
if(str3 ==str4)
printf("str3 and str4 are same\n");
else
printf("str3 and str4 are not same\n");
return 0;
}
这是由于每个字符数组的数组名代表首元素的地址,这个地址是不同的
而常量字符串是不能够被修改的,只需要保存一份
4.数组指针变量
数组指针是存放数组的指针变量
• 整形指针变量: int * pint; 存放的是整形变量的地址,能够指向整形数据的指针。
• 浮点型指针变量: float * pf; 存放浮点型变量的地址,能够指向浮点型数据的指针。
那数组指针变量应该是:存放的应该是数组的地址,能够指向数组的指针变量。
4.1数组指针变量的表达
1 int (*p) [10];
p先和 结合构成指针变量,然后指向的是大小为10的数组
注意:[ ]的优先级要⾼于号的,所以必须加上()来保证p先和 *结合
4.2数组指针变量的初始化
1 int (*p) [10] = &arr;
总结
以上就是今天要分享的深入理解指针3的内容了,希望对刚刚阅读本篇博客的你有所帮助。
标签:变量,int,char,理解,深入,数组,printf,指针 From: https://blog.csdn.net/krotox/article/details/137413677