char str = "abcd";
char* p = arr;
在需要的时候,我直接使用变量str不就行了吗,为什么还要有指针?有人说指针可以节省内存,我不明白,麻烦举例说明。
20 个解决方案
#1
char str = "abcd"; 这句话不报错?
总之使用指针跟节省内存没有半毛钱关系
总之使用指针跟节省内存没有半毛钱关系
#2
https://zhidao.baidu.com/question/362521628.html 来自百度 仅供参考
#3
这两个语句都有问题,你让别人怎么回答你?指针不是更省内存,而是减少内存拷贝。
#4
char str = "abcd";
这是定义字符的
指针只是指向内存的首地址,与节省内存没关系。
指针对比其他语言,能直接访问内存地址空间,所以效率会高点。当然使用汇编会更高。
学习C/C++,使用指针是不可避免的。
这是定义字符的
指针只是指向内存的首地址,与节省内存没关系。
指针对比其他语言,能直接访问内存地址空间,所以效率会高点。当然使用汇编会更高。
学习C/C++,使用指针是不可避免的。
#5
用指针节省内存一般是
calloc 或者malloc
还有就是字符数组排序的时候
如果用指针指向每个字符地址
交换的时候不用交换,每个字符串
直接交换字符指针即可“
EG:
这样能节省交换的运行内存和时间 希望能帮到你
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;
}
}
}
这样能节省交换的运行内存和时间 希望能帮到你
#7
char str = "abcd";
这句应该是
char* str = "abcd";
str和p都是指针,确实使用str就可以了
这里和节省内存没任何关系
这句应该是
char* str = "abcd";
str和p都是指针,确实使用str就可以了
这里和节省内存没任何关系
#8
和节省内存没关系 和交换内存有关系
就好像纸币代表一堆黄金
就是指针代表一堆内存
交换一吨一吨的黄金很麻烦 不如用纸币代替黄金
交换一堆堆的内存很没有效率 不如直接交换指向他们的指针
并且使用指针代表他们
就好像纸币代表一堆黄金
就是指针代表一堆内存
交换一吨一吨的黄金很麻烦 不如用纸币代替黄金
交换一堆堆的内存很没有效率 不如直接交换指向他们的指针
并且使用指针代表他们
#9
补充 好像还是和节省内存有关系的 呵呵
比如你的一间房子里放一堆黄金 放着放着放不下了
但是用纸币 可以放个几亿
比如你的一间房子里放一堆黄金 放着放着放不下了
但是用纸币 可以放个几亿
#10
然后你的房子太大了 交换起来不方便
不是还有房产证吗
这时候 房产证就是指针
房产证换了 房子就换了
不是还有房产证吗
这时候 房产证就是指针
房产证换了 房子就换了
#11
推荐:《深入理解C指针》
#12
可能是说内存可以动态按需分配,如果用静态的数组,事先可能无法确定需要多大的数组,只能定义较大的数组,造成浪费。
#13
应该是减少不必要的数据复制
#14
指针最基本也是最重要的用处就是提供一层间接。
#15
这样的目的可能是不想修改str的地址,通过p可以做到遍历str字符串。
#16
指针节省内存还是主要体现在参数传递上,比如传递一个结构体指针变量和传递一个结构体变量,若结构体占用内存越大,传递指针变量约节省内存的
#17
这个前提不对。指针不是用来是省内存的,可以用来操作内存,不过作为函数参数传递时,会减少拷贝操作,变相的节省了内存,但是这不是目的
#18
建立一个错误的理论,再来问为什么这样
#20
减少数据拷贝,直接告诉对方存放数据的地址,通过地址访问一个数据,比把数据拷贝一份给你,两个代价是不一样的
#1
char str = "abcd"; 这句话不报错?
总之使用指针跟节省内存没有半毛钱关系
总之使用指针跟节省内存没有半毛钱关系
#2
https://zhidao.baidu.com/question/362521628.html 来自百度 仅供参考
#3
这两个语句都有问题,你让别人怎么回答你?指针不是更省内存,而是减少内存拷贝。
#4
char str = "abcd";
这是定义字符的
指针只是指向内存的首地址,与节省内存没关系。
指针对比其他语言,能直接访问内存地址空间,所以效率会高点。当然使用汇编会更高。
学习C/C++,使用指针是不可避免的。
这是定义字符的
指针只是指向内存的首地址,与节省内存没关系。
指针对比其他语言,能直接访问内存地址空间,所以效率会高点。当然使用汇编会更高。
学习C/C++,使用指针是不可避免的。
#5
用指针节省内存一般是
calloc 或者malloc
还有就是字符数组排序的时候
如果用指针指向每个字符地址
交换的时候不用交换,每个字符串
直接交换字符指针即可“
EG:
这样能节省交换的运行内存和时间 希望能帮到你
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;
}
}
}
这样能节省交换的运行内存和时间 希望能帮到你
#6
还有就是用指针可以是程序的灵活性更好:
http://blog.csdn.net/zhagoodwell/article/details/53512140
http://blog.csdn.net/zhagoodwell/article/details/53512140
#7
char str = "abcd";
这句应该是
char* str = "abcd";
str和p都是指针,确实使用str就可以了
这里和节省内存没任何关系
这句应该是
char* str = "abcd";
str和p都是指针,确实使用str就可以了
这里和节省内存没任何关系
#8
和节省内存没关系 和交换内存有关系
就好像纸币代表一堆黄金
就是指针代表一堆内存
交换一吨一吨的黄金很麻烦 不如用纸币代替黄金
交换一堆堆的内存很没有效率 不如直接交换指向他们的指针
并且使用指针代表他们
就好像纸币代表一堆黄金
就是指针代表一堆内存
交换一吨一吨的黄金很麻烦 不如用纸币代替黄金
交换一堆堆的内存很没有效率 不如直接交换指向他们的指针
并且使用指针代表他们
#9
补充 好像还是和节省内存有关系的 呵呵
比如你的一间房子里放一堆黄金 放着放着放不下了
但是用纸币 可以放个几亿
比如你的一间房子里放一堆黄金 放着放着放不下了
但是用纸币 可以放个几亿
#10
然后你的房子太大了 交换起来不方便
不是还有房产证吗
这时候 房产证就是指针
房产证换了 房子就换了
不是还有房产证吗
这时候 房产证就是指针
房产证换了 房子就换了
#11
推荐:《深入理解C指针》
#12
可能是说内存可以动态按需分配,如果用静态的数组,事先可能无法确定需要多大的数组,只能定义较大的数组,造成浪费。
#13
应该是减少不必要的数据复制
#14
指针最基本也是最重要的用处就是提供一层间接。
#15
这样的目的可能是不想修改str的地址,通过p可以做到遍历str字符串。
#16
指针节省内存还是主要体现在参数传递上,比如传递一个结构体指针变量和传递一个结构体变量,若结构体占用内存越大,传递指针变量约节省内存的
#17
这个前提不对。指针不是用来是省内存的,可以用来操作内存,不过作为函数参数传递时,会减少拷贝操作,变相的节省了内存,但是这不是目的
#18
建立一个错误的理论,再来问为什么这样
#19
http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素
#20
减少数据拷贝,直接告诉对方存放数据的地址,通过地址访问一个数据,比把数据拷贝一份给你,两个代价是不一样的