C语言中为什么使用指针能节省内存?

时间:2020-12-18 20:38:45
char str = "abcd";
char* p = arr;

在需要的时候,我直接使用变量str不就行了吗,为什么还要有指针?有人说指针可以节省内存,我不明白,麻烦举例说明。 C语言中为什么使用指针能节省内存?

20 个解决方案

#1


char str = "abcd"; 这句话不报错?

总之使用指针跟节省内存没有半毛钱关系

#2


https://zhidao.baidu.com/question/362521628.html 来自百度  仅供参考

#3


这两个语句都有问题,你让别人怎么回答你?指针不是更省内存,而是减少内存拷贝。

#4


char str = "abcd";
这是定义字符的

指针只是指向内存的首地址,与节省内存没关系。
指针对比其他语言,能直接访问内存地址空间,所以效率会高点。当然使用汇编会更高。
学习C/C++,使用指针是不可避免的。

#5


用指针节省内存一般是
calloc 或者malloc
还有就是字符数组排序的时候
如果用指针指向每个字符地址
交换的时候不用交换,每个字符串
直接交换字符指针即可“
EG:
# include <stdio.h>  
# include <string.h>  
# define N 100   //如果想录入x个字节那么就把N的数值改成x   
int gainchar(char *A,int min,int max); 
int gainint(int *p,int a,int b);
void paixu(char *a[],int n,int F); 
void main(){  
    int n,F,i;  
    char B[N][N+1],*P[N],S[][3]={"升","降"};  
do{  
printf("输入要录入的字符串个数[2,%d]:",N);
gainint(&n,2,N);
for(i=0;i<n;i++)
{
printf("第%d个字符串,字节--[1,%d]:",N);
gainchar(B[i],1,N);
P[i]=B[i];//让每个指针指向每个字符数组
}
printf("升序请按0:降序请按1--[0,1]:");
          gainint(&F,0,1);
paixu(P,n,F);
printf("%s后:\n",S[F]);
for(i=0;i<n;i++)
printf("%s\n",P[i]);
}while(1);  
}   
int gainint(int *p,int a,int b)//输入int *p直至满足[a,b]输入结束,返回*p      
{       
    do{      
        *p=a-1;    
        scanf("%d",p);      
        while(getchar()!='\n');      
        if(*p>b||*p<a)      
            printf("输入有误,请重新输入(%d--%d):\n",a,b);      
    }while(*p>b||*p<a);      
    return *p;      
}  
int gainchar(char *A,int min,int max)//长度在[min,max]  <闭区间>  之间时 函数结束 返回字符串A的长度      
{      
    int B,C;    
 do{      
        A[max]=B=C=0;  
        while((A[B++]=getchar())!='\n'&&B<max);  
        if(A[B-1]!='\n')  
            while(getchar()!='\n'&&++C);      
    else A[--B]=0;   
    if(C||B&&B<min)  
       printf("您录入的字符串长度:%d字节\n只录入(%d--%d)个字节!\n",B+C,min,max);      
    }while(C||B<min);      
    return B;    
}
void paixu(char *a[],int n,int F) 
{  
    int i,j,k,Y;  
char *temp;
for(i=0;i<n-1;i++)  
{  
k=i;  
for(j=i+1;j<n;j++)  
{
            Y=strcmp(a[j],a[k]); 
if(F?Y<0:Y>0)   //b=0升序  b为其他降序  
k=j;  
}
if(k!=i)  
{  
temp=a[k];  
a[k]=a[i];  
a[i]=temp;  
}  
}  
}  

C语言中为什么使用指针能节省内存?
这样能节省交换的运行内存和时间 希望能帮到你

#6


还有就是用指针可以是程序的灵活性更好:
http://blog.csdn.net/zhagoodwell/article/details/53512140

#7


char str = "abcd"; 

这句应该是 

char* str = "abcd";

str和p都是指针,确实使用str就可以了

这里和节省内存没任何关系

#8


和节省内存没关系 和交换内存有关系
就好像纸币代表一堆黄金
就是指针代表一堆内存
交换一吨一吨的黄金很麻烦 不如用纸币代替黄金
交换一堆堆的内存很没有效率 不如直接交换指向他们的指针 
并且使用指针代表他们

#9


补充 好像还是和节省内存有关系的 呵呵

比如你的一间房子里放一堆黄金 放着放着放不下了
但是用纸币 可以放个几亿 C语言中为什么使用指针能节省内存? 

#10


然后你的房子太大了  交换起来不方便
不是还有房产证吗
这时候 房产证就是指针
房产证换了 房子就换了 C语言中为什么使用指针能节省内存?

#11


推荐:《深入理解C指针》

#12


可能是说内存可以动态按需分配,如果用静态的数组,事先可能无法确定需要多大的数组,只能定义较大的数组,造成浪费。

#13


引用 7 楼 paschen 的回复:
char str = "abcd"; 

这句应该是 

char* str = "abcd";

str和p都是指针,确实使用str就可以了

这里和节省内存没任何关系

应该是减少不必要的数据复制

#14


指针最基本也是最重要的用处就是提供一层间接。

#15


这样的目的可能是不想修改str的地址,通过p可以做到遍历str字符串。

#16


指针节省内存还是主要体现在参数传递上,比如传递一个结构体指针变量和传递一个结构体变量,若结构体占用内存越大,传递指针变量约节省内存的

#17


这个前提不对。指针不是用来是省内存的,可以用来操作内存,不过作为函数参数传递时,会减少拷贝操作,变相的节省了内存,但是这不是目的

#18


建立一个错误的理论,再来问为什么这样 C语言中为什么使用指针能节省内存?

#19


http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素

#20


减少数据拷贝,直接告诉对方存放数据的地址,通过地址访问一个数据,比把数据拷贝一份给你,两个代价是不一样的

#1


char str = "abcd"; 这句话不报错?

总之使用指针跟节省内存没有半毛钱关系

#2


https://zhidao.baidu.com/question/362521628.html 来自百度  仅供参考

#3


这两个语句都有问题,你让别人怎么回答你?指针不是更省内存,而是减少内存拷贝。

#4


char str = "abcd";
这是定义字符的

指针只是指向内存的首地址,与节省内存没关系。
指针对比其他语言,能直接访问内存地址空间,所以效率会高点。当然使用汇编会更高。
学习C/C++,使用指针是不可避免的。

#5


用指针节省内存一般是
calloc 或者malloc
还有就是字符数组排序的时候
如果用指针指向每个字符地址
交换的时候不用交换,每个字符串
直接交换字符指针即可“
EG:
# include <stdio.h>  
# include <string.h>  
# define N 100   //如果想录入x个字节那么就把N的数值改成x   
int gainchar(char *A,int min,int max); 
int gainint(int *p,int a,int b);
void paixu(char *a[],int n,int F); 
void main(){  
    int n,F,i;  
    char B[N][N+1],*P[N],S[][3]={"升","降"};  
do{  
printf("输入要录入的字符串个数[2,%d]:",N);
gainint(&n,2,N);
for(i=0;i<n;i++)
{
printf("第%d个字符串,字节--[1,%d]:",N);
gainchar(B[i],1,N);
P[i]=B[i];//让每个指针指向每个字符数组
}
printf("升序请按0:降序请按1--[0,1]:");
          gainint(&F,0,1);
paixu(P,n,F);
printf("%s后:\n",S[F]);
for(i=0;i<n;i++)
printf("%s\n",P[i]);
}while(1);  
}   
int gainint(int *p,int a,int b)//输入int *p直至满足[a,b]输入结束,返回*p      
{       
    do{      
        *p=a-1;    
        scanf("%d",p);      
        while(getchar()!='\n');      
        if(*p>b||*p<a)      
            printf("输入有误,请重新输入(%d--%d):\n",a,b);      
    }while(*p>b||*p<a);      
    return *p;      
}  
int gainchar(char *A,int min,int max)//长度在[min,max]  <闭区间>  之间时 函数结束 返回字符串A的长度      
{      
    int B,C;    
 do{      
        A[max]=B=C=0;  
        while((A[B++]=getchar())!='\n'&&B<max);  
        if(A[B-1]!='\n')  
            while(getchar()!='\n'&&++C);      
    else A[--B]=0;   
    if(C||B&&B<min)  
       printf("您录入的字符串长度:%d字节\n只录入(%d--%d)个字节!\n",B+C,min,max);      
    }while(C||B<min);      
    return B;    
}
void paixu(char *a[],int n,int F) 
{  
    int i,j,k,Y;  
char *temp;
for(i=0;i<n-1;i++)  
{  
k=i;  
for(j=i+1;j<n;j++)  
{
            Y=strcmp(a[j],a[k]); 
if(F?Y<0:Y>0)   //b=0升序  b为其他降序  
k=j;  
}
if(k!=i)  
{  
temp=a[k];  
a[k]=a[i];  
a[i]=temp;  
}  
}  
}  

C语言中为什么使用指针能节省内存?
这样能节省交换的运行内存和时间 希望能帮到你

#6


还有就是用指针可以是程序的灵活性更好:
http://blog.csdn.net/zhagoodwell/article/details/53512140

#7


char str = "abcd"; 

这句应该是 

char* str = "abcd";

str和p都是指针,确实使用str就可以了

这里和节省内存没任何关系

#8


和节省内存没关系 和交换内存有关系
就好像纸币代表一堆黄金
就是指针代表一堆内存
交换一吨一吨的黄金很麻烦 不如用纸币代替黄金
交换一堆堆的内存很没有效率 不如直接交换指向他们的指针 
并且使用指针代表他们

#9


补充 好像还是和节省内存有关系的 呵呵

比如你的一间房子里放一堆黄金 放着放着放不下了
但是用纸币 可以放个几亿 C语言中为什么使用指针能节省内存? 

#10


然后你的房子太大了  交换起来不方便
不是还有房产证吗
这时候 房产证就是指针
房产证换了 房子就换了 C语言中为什么使用指针能节省内存?

#11


推荐:《深入理解C指针》

#12


可能是说内存可以动态按需分配,如果用静态的数组,事先可能无法确定需要多大的数组,只能定义较大的数组,造成浪费。

#13


引用 7 楼 paschen 的回复:
char str = "abcd"; 

这句应该是 

char* str = "abcd";

str和p都是指针,确实使用str就可以了

这里和节省内存没任何关系

应该是减少不必要的数据复制

#14


指针最基本也是最重要的用处就是提供一层间接。

#15


这样的目的可能是不想修改str的地址,通过p可以做到遍历str字符串。

#16


指针节省内存还是主要体现在参数传递上,比如传递一个结构体指针变量和传递一个结构体变量,若结构体占用内存越大,传递指针变量约节省内存的

#17


这个前提不对。指针不是用来是省内存的,可以用来操作内存,不过作为函数参数传递时,会减少拷贝操作,变相的节省了内存,但是这不是目的

#18


建立一个错误的理论,再来问为什么这样 C语言中为什么使用指针能节省内存?

#19


http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素

#20


减少数据拷贝,直接告诉对方存放数据的地址,通过地址访问一个数据,比把数据拷贝一份给你,两个代价是不一样的