标签:改变 范围 验证 必须 移动 算术运算 blog font 增加
char a[20]; int *ptr = (int * )a; ptr++
#include <bits/stdc++.h> using namespace std; int main() { char a[20]; int *ptr = (int * )a;/// 强制类型转换不会改变a的类型 /*** ** 吾日三醒指针:指针的类型,指针指向的类型,指针指向哪里 ** ptr 的类型是 int* , 指向的类型是 int , 指向整形变量 a ***/ cout<<" befor : " << ptr<<endl; ptr++; cout<< " sizeof (ptr) "<< sizeof(ptr)<<endl; /*** ** ptr 类型是指针,指针的自增,当然是增加自身的大小了 ** sizeof(ptr) 为4, ptr 增加4 ***/ cout<<" after : "<<ptr<<endl; }
int arr[20] = {0}; int *ptr = arr; for (int i=0; i<20; i++) { (*ptr)++; ptr++; }
#include <bits/stdc++.h> using namespace std; int main() { int arr[20] = {0}; int *ptr = arr; /*** ** 吾日三醒指针:指针的类型,指针指向的类型,指针指向哪里 ** ptr 的类型是 int* , 指向的类型是 int , 指向 arr ***/ for (int i=0; i<20; i++) { (*ptr)++; /// 改变的是 ptr 指向的值 ptr++; /// 改变的是 ptr 指向的地址 ,再次验证 ptr 自增的是 sizeof(ptr) cout<<" ptr : "<<ptr<<endl; } }
例题3:
char a[20] ="You_are_a_girl; int *ptr = (int *)a; ptr += 5;
#include <bits/stdc++.h> using namespace std; int main() { char a[20] = "You_are_a_girl"; int *ptr = (int * )a; /*** ** 吾日三醒指针:指针的类型,指针指向的类型,指针指向哪里 ** ptr 的类型是 int* , 指向的类型是 int , 指向 a ***/ cout<<" ptr : "<<ptr<<endl; ptr += 5; /*** ** ptr + 5 : 编译器处理为 ptr 的值加上 5 * sizeof(int) ** ptr 向高地址移动20个字节, 此时超出a 的合法范围, 但是语法可以 ** 我也不懂 这里为什么超出 a 的合法范围 ????求教 ***/ cout<<" ptr : "<<ptr<<endl; }
例题4:
char a[20] = "You_are_a_girl"; char *p = a; char **ptr = &p; printf("**ptr = %c \n", **ptr); ptr++; printf("*ptr = %c \n", **ptr);
#include <bits/stdc++.h> using namespace std; int main() { char a[20] = "You_are_a_girl"; char *p = a; char **ptr = &p; /*** ** 吾日三醒指针:指针的类型,指针指向的类型,指针指向哪里 ** p 的类型是 char* , 指向的类型是 char , 指向 a ** ptr 的类型是 char ** , 指向的类型是 char* , 指向 &p ***/ printf("**ptr = %c \n", **ptr); /*cout<<" *p "<<*p<<endl; cout<<" p "<<p<<endl;*/ cout<<" ptr "<<ptr<<endl; ptr++; cout<<" ptr "<<ptr<<endl; cout<<" sizeof(char *) "<<sizeof(char *)<<endl; /// ptr自增 ,增加的是它指向的类型的 所占字节 printf("*ptr = %c \n", **ptr); /// 此时 *(ptr) 没人知道回事什么,也许是随机值,也许是非法操作 }
标签:改变 范围 验证 必须 移动 算术运算 blog font 增加
原文地址:http://www.cnblogs.com/sxy-798013203/p/7637298.html