C语言之指针的用法与常见错误(2)

指针变量的使用步骤:

#定义指针变量

##给指针变量赋地址(向操作系统申请空间)

char *fp;

fp = (char *)malloc(sizeof(char) * 10);

if(NULL = fp)
{
    printf("Malloc failure!");        
}

free(fp);                        //释放空间

int a[5] = {1, 2, 3, 4, 5};

int *p1 = (int*)(&a + 1);
int *p2 = (int*)((int)a + 1);
int *p3 = (int*)(a + 1);

p1[0], p2[0], p3[0]的值分别为多少?

int a[5] = {1, 2, 3, 4, 5};

int *p1 = (int*)(&a + 1);
int *p2 = (int*)((int)a + 1);
int *p3 = (int*)(a + 1);

p1[0], p2[0], p3[0]的值分别为多少?

#p1 中,&a 表示取数组的地址,&a + 1 加20个字节 超过了这个数组的范围,所以输出的结果是一个随机值

#p1中,a 是数组名,本身是一个地址,是第一个元素的地址,int 将 a 转换成一个随机的整型数,int * 将 a + 1 强制转换成指针,输出的如果也是一个随机的垃圾值

#p3中,a 是第一个元素的地址,单位是 4 字节,a + 1 是 数组第二个值的地址,int * 将它转换成了 一个整型的指针

p3[0]=====*(p3 + 0) 指针p3 指向的是第二个元素的地址,所以输出的是第二个元素 2

猜你喜欢

转载自blog.csdn.net/qq_42200183/article/details/81264696