1.二级指针
二级指针通俗来讲就是指针变量的地址
int main()
{
int a = 10;
int* p = &a;//p是指针变量,是一级指针变量
int** pa = &p;//*p 是二级指针变量
printf("%d", **pa);//输出为10
return 0;
}
三级指针就是二级指针便的地址(int ***paa=&pa)
以此类推四、五……指针。
2.指针数组
int main()
{
int a = 1;
int b = 2;
int c = 3;
int* arr[] = { &a,&b,&c };//指针数组 或者{a,b,c}
for (int i = 0; i < 3; i++)
{
printf("%d ", *(arr[i]));
}
return 0;
}
3. 指针数组模拟⼆维数组
int main()
{
int arr1[5] = { 0,1,2,3,4 };
int arr2[5] = { 6,7,8,9,10 };
int arr3[5] = { 11,12,13,14,15 };
int* arr[3] = { arr1,arr2,arr3 };//||{&arr1,&arr2,&arr3}
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 5; j++)
{
printf("%d ", arr[i][j]);
}
}
return 0;
}
4.字符指针变量
int main()
{
char arr[] = "abcdef";
char* p = arr;
printf("%c\n", *p);
const char* ps = "abcdef";//这⾥是把⼀个字符串放到ps指针变量里了吗?
printf("%s\n", ps);
printf("%c\n", arr[2]);
return 0;
}
代码 const char* ps = “abcdef”; 特别容易让同学以为是把字符串 abcdef放到字符指针 ps ⾥了,但是本质是把字符串 abcdef. ⾸字符的地址放到了ps中。
这⾥arr3和arr4指向的是⼀个同⼀个常量字符串。C/C++会把常量字符串存储到单独的⼀个内存区域,当⼏个指针指向同⼀个字符串的时候,他们实际会指向同⼀块内存。但是⽤相同的常量字符串去初始化不同的数组的时候就会开辟出不同的内存块。所以arr1和arr2不同,arr3和arr4相同。
int main()
{
char arr1[] = "abcdef";
char arr2[] = "abcdef";
const char *arr3= "abcdef";
const char *arr4= "abcdef";
if (arr1 == arr2)
printf("arr1和arr2是内存相同的\n");
else
printf("arr1和arr2是内存不同的\n");
if (arr3 == arr4)
printf("arr3和arr4是内存相同的\n");
else
printf("arr3和arr4是内存不同的\n");
return 0;
}
持续指针系列