c语言函数改变指针指向 c语言指针变量做函数参数

C语言:如何修改指针指向字符串的单字符双引号括起来c语言函数改变指针指向的字符串是字符串字面量(string
literal)c语言函数改变指针指向,是静态对象,因此从语义上来说,指针指向它之后字符串内容自然不可修改 。虽然不可被更改,但它是左值(lvalue),用取地址还是可行的(结果是地址常量) 。在C中它的类型是char[] , 不是常量(在C++中类型是char
const[],是常量) 。修改字符串字面量的字符从而改变字符串字面量,结果是未定义(Undefined)的,行为不可预料,应该避免使用 。
如果要修改的话,只有用指针指向可以修改的字符串,例如字符数组 。
要实现LZ所说的功能,可以这样c语言函数改变指针指向:
char
*p=malloc(sizeof("this
is
a
program"));
strcpy(p,"this
is
a
program");
代替第一行即可 。
或者也可以用非ANSI
C的库函数:
char
*p=strdup("this
is
a
program");
这样,p指向的内存单元是可修改的堆空间 。
----
[原创回答团]
C语言如何使指针指向改变你的zao 函数有问题,涉及到一个浅层拷贝的错误,因为zao函数的参数是字符串指针,所以你的临时变量t不能只是简单的交换地址,因为推出zao函数后,p、q退出栈,所以最终的效果是没有变化 , 根据你的需要,做了如下程序,
void zao(char *p,char *q)
{
char *t = new char[100];
strcpy(t,p);
strcpy(p,q);
strcpy(q,t);
delete [] t;
}
这样你的函数就可以运行了,
用C语言,怎样编一个函数,改变指针可以定义这样的一个函数,不过参数类型不是一维指针,而是二维指针:
//---------------------------------------------------------------------------
#include stdio.h
int *move(int **p) //修改整形指针p的指向,使它指向相邻的下一个int存储地址,并返回这个新的地址
{
*p+=1;
return *p;
}
int main(void)
{
int a[]={1,2,3,4,5};
int *p=a;//定义一个整形指针,并指向a[0]
printf("%d\n",*p);//输出现在指向的地址保存的值
printf("%d",*move(p));//移动指针指向,并输出移动后指向的地址保存的值
return 0;
}
//---------------------------------------------------------------------------
C语言能在函数里改变指针所指的对象吗?是的,不能,你的理解是对的 。
指针传递可以改变其指向地址的内容,但不能改变原指针的指向 。
如果需要改变指向,需要使用指向指针的指针作为参数 。
【c语言函数改变指针指向 c语言指针变量做函数参数】关于c语言函数改变指针指向和c语言指针变量做函数参数的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读