前言
开始定义一个指针,指向一片空间,并且赋值;然后再定义一个指针,将开始的那个指针赋值给后面定义的这个指针(就是目前这两个指针都指向同一片空间的首地址),当重新给开始的那个指针划分空间时,后面定义的那个指针指向不变,说明后面指针指向的是连续空间的首地址而不是开始的那个指针。
一、重新给开始开始定义的指针划分空间
#include<stdio.h>
#include<stdlib.h>
int main()
{
int *data;
data=(int*)malloc(sizeof(int)*5);//给第一个指针划分空间
int i;
for(i=0;i<5;i++)//赋值
{
data[i]=i+1;
}
int *p=data;//将第一个指针赋值给第二个指针(两个指针指向同一片区域)
for(i=0;i<5;i++)
{
printf("%d\t",p[i]);
}
printf("\n");
data=(int*)malloc(5*sizeof(int));//改变第一个指针的指向
for(i=0;i<5;i++)
{
printf("%d\t",data[i]);//第一个指针的输出改变
}
printf("\n");
for(i=0;i<5;i++)
{
printf("%d\t",p[i]);//第二个指针 的输出不变
}
return 0;
}
二、改变第一个指针里面的数值
#include<stdio.h>
#include<stdlib.h>
int main()
{
int *data;
data=(int*)malloc(sizeof(int)*5);//给第一个指针划分空间
int i;
for(i=0;i<5;i++)//赋值
{
data[i]=i+1;
}
int *p=data;//将第一个指针赋值给第二个指针(两个指针指向同一片区域)
for(i=0;i<5;i++)
{
printf("%d\t",p[i]);
}
printf("\n");
for(i=0;i<5;i++)
{
data[i]=i*2;//改变第一个指针指向空间的数值
}
for(i=0;i<5;i++)
{
printf("%d\t",p[i]);//第二个指针指向空间的数值也发生改变
}
return 0;
}
三、改变第二个指针里面的数值
代码如下(示例):
#include<stdio.h>
#include<stdlib.h>
int main()
{
int *data;
data=(int*)malloc(sizeof(int)*5);//给第一个指针划分空间
int i;
for(i=0;i<5;i++)//赋值
{
data[i]=i+1;
}
int *p=data;//将第一个指针赋值给第二个指针(两个指针指向同一片区域)
for(i=0;i<5;i++)
{
printf("%d\t",p[i]);
}
printf("\n");
for(i=0;i<5;i++)
{
p[i]=i*2;//改变第二个指针指向空间的数值
}
for(i=0;i<5;i++)
{
printf("%d\t",data[i]);//第一个指针指向空间的数值也发生改变
}
return 0;
}
本文通过三个实验探讨了在C语言中两个指针指向同一内存区域时的行为变化。包括重新分配指针所指向的空间、改变指针指向的数值等场景,揭示了指针操作中的关键细节。

439

被折叠的 条评论
为什么被折叠?



