0
点赞
收藏
分享

微信扫一扫

C语言指针复习


#include<stdio.h>
//int main()
//{
//指针:利用地址 它的值指向存在电脑当中另一个地方的值 通过其地址可以找到其内存单元 指针是变量-变量里面存放着地址
//任何存入指针变量的值 就会被当做地址来处理!!!!!!!!
//一个内存单元大小:一个字节
//在32位机上 一个地址是4字节 在64位机上 一个地址是8个字节
//指针变量不初始化默认随机产生一个字节!!!!!
//int a = 1;
//int* p = &a;//p是指针变量-用来存放地址的变量 其类型是 int*

//指针和指针类型
//指针类型决定了指针进行解引用时能访问的空间大小!!!!!
//int* a;a-时能够访问4个字节

//char a;a-时能够访问1个字节

//double a;*a-时能够访问8个字节 !!!!!!!!!!! 决定了之后赋值
//printf("%d\n", sizeof(char*));//都是4 因为目前在32位的平台上 默认是4个字节!!!!!
//printf("%d\n", sizeof(short*));
//printf("%d\n", sizeof(int*));
//printf("%d\n", sizeof(double*));

//int a = 0x11223344;//存放了一个16进制位的数值(两个数字一位)-所以这个变量所占4个字节
//int* pa = &a;
//char* pc = &a;
//pa = 0;//地址a的变量4个字节全变 0-00 00 00 00
//pc = 0;//地址a的变量只有一个首字节变成了0-00 33 22 11
////printf("%p\n", pa);//输出表面一模一样 但是由上面可得 地址内部并不一样!!!!!
////printf("%p\n", pc);

//指针+-整数
//指针类型决定了指针走一步走多远 (指针的步长)
//int* p+1;向后(右)走了 4 个字节
//char* p+1;向后走了 1 个字节
//double* p+1;向后走了 8 个字节
// int a = 0x11223344;
// int* pa = &a;
// char* pc = &a;
// printf("%p\n", pa);//006FF740
// printf("%p\n", pa + 1); //006FF744 整形指针加1地址上加了4个字节
//
// printf("%p\n", pc);//006FF740
// printf("%p\n", pc+1);//006FF741 符号指针加1地址上加了1个字节
// return 0;
//}
/*int main()
{
///int p = NULL;//定义指针为空指针
//利用指针打印数组元素
//int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10 };
//int i = 0;
//int sz = sizeof(a) / sizeof(a[0]);
////int* p = a;//取的是首元素的地址 也可以:int* p=&a[i]; 取第i个元素的地址
//int* p = &a[0];
//for (i = 0; i < sz; i++)//代表移动几次
//{
// printf("%d\n", p);//打印的是p p代表的是a的地址!!!!!
// p=p + 1;//p向右移一位 -或可以变成p++ -的话是向左移动
//}
//指针(减)-指针:得到 的是中间的元素个数
// int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// printf("%d\n", &a[9] - &a[0]); //右边da的地址-左边小的地址(同一个数组才行) //如果是左减右的话数组大小是取其绝对值!
// return 0;
//}
//int my_strlen(char* str) //因为接受的是char的首元素的地址 所以定义的是char*
//{
// char* start = str;//首元素的地址
// char* end = str;//\0的地址
// while (*end != '\0')
// {
// end++;
// }
// return end - start;
//}
//
//int main()
//{//strlen 求字符串长度
//递归-模拟strlen 计算字符串长度
// char arr[] = "hello word";//这个数组是 hello word\0
// int len = my_strlen(arr);
// printf("%d\n", len);
// return 0;
//}
//int main()
//{
// int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 90 };
// printf("%d\n", arr);//都是首元素地址
// printf("%d\n", &arr[0]);//都是首元素地址
// //但是:&arr 并不是表示首元素地址 -其是表示(&数组名)-整个数组的地址!!!!!!!!!
// //sizeof(arr)-sizeof(数组名) 表示的也是整个数组 -其计算的是整个数组的大小 !!!!!-单位(字节)
// return 0;
//}
int main()
{
////二极指针
// int a[] = { 0 };
// int* pa = &a;//一级指针 创建了指针变量pa
// int** ppa = &pa;//二级指针变量-存放了指针变量的地址
// int***pppa = &ppa;//同理:三级指针。。。
//
//指针数组
int a = 10;
int b = 10;
int c = 10;
int* arr2[] = {&a,&b,&c};
int i;
for (i = 0; i < 3; i++)
{
printf("%d\n",*(arr2[i]));//打印arr2每一个数组地址的值
}
return 0;
}



举报

相关推荐

0 条评论