建筑网站doseo技术网网
文章目录
- 5. 指针和数组
- 6. 二级指针
- 7. 指针数组
- 附:
5. 指针和数组
指针变量:指针变量就是指针变量,不是数组,指针变量的大小是4/8个字节,专门是用来存放地址的。
数组:数组就是数组,不是指针,数组是一块连续的空间,可以存放1个或者多个类型相同的数据。
两者之间的联系:
数组中,数组名其实是数组首元素的地址,数组名 == 地址 == 指针
当我们知道数组首元素的地址的时候,因为数组又是连续存放的,所以通过指针就可以遍历访问数组
数组是可以通过指针来访问的
#include <stdio.h>int main()
{int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };int i = 0;int sz = sizeof(arr) / sizeof(arr[0]);int* p = arr;for (i = 0; i < sz; i++){//printf("%p == %p\n", p + i, &arr[i]);printf("%d ", *(p + i));}return 0;
}
6. 二级指针
指针变量也是变量,是变量就有地址,那指针变量的地址存放在哪里?
这就是二级指针。
#include <stdio.h>int main()
{int a = 10;int* p = &a;//p是一级指针变量,指针变量也是变量,变量是在内存中开辟空间的,是变量就有地址int** pp = &p;//pp就是二级指针变量,二级指针变量就是用来存放一级指针变量的地址//*(*pp) = 100;**pp = 100;printf("%d\n", a);//int** * ppp = &pp;return 0;
}
举个例子:
int main()
{char arr1[] = "abcdef";char arr2[] = "hello world";char arr3[] = "cuihua";char* parr[] = { arr1, arr2, arr3 };char** p = parr;return 0;
}
7. 指针数组
指针数组是指针还是数组?
答案:是数组,是存放指针的数组。
数组我们已经知道整形数组,字符数组,那指针数组是怎样的?
#include <stdio.h>int main()
{char arr1[] = "abcdef";char arr2[] = "hello world";char arr3[] = "cuihua";//指针数组char* parr[] = { arr1, arr2, arr3 };int i = 0;for (i = 0; i < 3; i++){printf("%s\n", parr[i]);}/*char arr[] = "abcdef";printf("%s\n", arr);*/return 0;
}
#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[] = { arr1, arr2, arr3 };int i = 0;for (i = 0; i < 3; i++){int j = 0;for (j = 0; j < 5; j++){printf("%d ", parr[i][j]);//printf("%d ", *(parr[i] + j));//和上面等价}printf("\n");}return 0;
}
附:
指针初阶(1)