char指针指向int数组

#include <stdio.h>

int main()
{
int arr[10]={0};
int i=0;
char *p=arr;
for(i=0;i<10;i++)
{
*(p+i)=1;
printf("%d\n",arr[i]);
}
return 0;
}

为什么只有第一个数字是1?

int 型应该用int 型指针,需要对应

第一个位置 *p 其实就是 数组 arr 的 第一个位置, *p 被赋值为1了,arr[0] 的值也就变了
但因为 你的 p 指针 是 char类型的, 只有1个字节, 而 int 是 4个字节;
后面的 *(p+i) 其实 不是 arr[i] 对应的值【1<= i <= 9】, 两者的地址是不一样的,改了 *(p+i) 不会修改 对应 arr[i] 的值,所以后面的输出还都是 0。

改造:

int *p = arr; // p 指针改成 int *

img


如有帮助,欢迎采纳哈!

在这里插入图片描述

本人的开源项目,欢迎star支持下!!!

指针的类型决定了指针在解引用操作时候访问的大小,int类型都指针是4个字节,而char类型的指针只能一次访问一个字节,因此想要用指针访问int类型的数组应该使用int类型的指针