#include <stdio.h>
/*1.指针类型决定了指针进行解引用操作的时候,能够访问空间的大小
* int* p *p能够访问4个字节
* char* p *p能够访问1个字节
* double* p *p能够访问8个字节
* 2.指针类型决定了:指针走一步走多远(只针对步长)
*/
//int main()
//{
// int a = 0x11223344;
// int* p1 = &a;
// char* p2 = &a;
// *p1 = 0;
// *p2 = 0;
// printf("%d\n", p1);
// printf("%d\n", p2);
//
// /*
// 0075F7D4
// 0075F7D8
// 0075F7D4
// 0075F7D5
// */
// printf("%p\n",p1);
// printf("%p\n", p1 + 1);
// printf("%p\n", p2);
// printf("%p\n", p2 + 1);
//
// return 0;
//}
/*野指针:
* 1.指针未初始化
* 2.指针越界访问
* 3.指针指向的空间被释放
*/
//int main()
//{
// //第一种情况:
// int* p;
// *p = 20;
// //第二种情况:
// int arr[10] = { 0 };
// int* p = arr;
// int i = 0;
// for (i = 0; i <= 11; i++)
// {
// *(p++) = i;
// }
// return 0;
//}
//int main()
//{
// char ch[5] = { 0 };
// int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
// printf("%d\n", &arr[9] - &arr[0]);//9 //下标9到下标0中间元素的个数
// printf("%d\n", &arr[9] - &ch[0]);//不可控,随机数
// return 0;
//}
//求字符串的成度
//int my_strlen(char* str)
//{
// char* start = str;
// char* end = str;
// while(*end != '\0')
// {
// end++;
// }
// return end - start;
//}
//int main()
//{
// char arr[] = "bit";
// int len = my_strlen(arr);
// printf("%d\n", len);//3
// return 0;
//}
//int main()
//{
// int arr[10] = { 0 };
// printf("%p\n", arr);//首元素的地址
// printf("%p\n", arr + 1);
//
// printf("%p\n", &arr[0]);
// printf("%p\n", &arr[0] + 1);
//
// printf("%p\n", &arr);//整个数组的地址
// printf("%p\n", &arr + 1);
// //两个例外:
// //1.&arr-&数组名-数组名不是首元素的地址,表示整个数组--&数组名-取出的是整个元素的地址
// //2.sizeof(arr)--sizeof(数组名)--数组名表示的是整个数组--sizeof(数组名)计算的是整个数组的大小
//
//
// return 0;
//}
//可以直接通过指针访问数组
//int main()
//{
// int arr[10] = { 0 };
// int* p = arr;
// int i = 0;
// for (i = 0; i < 10; i++)
// {
// *(p + i) = i;
// }
// for (i = 0; i < 10; i++)
// {
// printf("%d ", arr[i]);
// // printf("%d ", *(p + i));
// }
// return 0;
//}
//二级指针
//int main()
//{
// int a = 10;
// int* pa = &a;//存放的是a的地址
// int** ppa = &pa;//二级指针,存放的是pa的地址
// //二级指针
// printf("%d\n" ,**ppa);
// printf("%d\n", a);
// return 0;
//}
//指针数组->数组->存放指针的数组
//数组指针->指针
int main()
{
int a = 10;
int b = 20;
int c = 30;
//int arr[10];
int* arr2[3] = {&a,&b,&c};//指针数组
int i = 0;
for (i = 0; i < 3; i++)
{
printf("%d ", *(arr2[i]));//10 20 30
}
printf("\n");
return 0;
}
c语言复习8-27
最新推荐文章于 2024-11-07 23:24:32 发布