#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 *
如有帮助,欢迎采纳哈!
指针的类型决定了指针在解引用操作时候访问的大小,int类型都指针是4个字节,而char类型的指针只能一次访问一个字节,因此想要用指针访问int类型的数组应该使用int类型的指针