C语言指针函数的问题。

作者&投稿:禄牵 (若有异议请与网页底部的电邮联系)
关于C语言中指针函数的问题~

不行, 原因是found函数已经声明成返回一个int指针的函数了,如果不声明p为指针则在p=founc(a,n)时会因为类型不匹配而报错。
两种方法可以解决:
1,直接省略掉变量p,在printf语句中直接用printf("%d", *found(a,n));来输出结果;
2,修改found函数为:
int found(int b[10], int n){ return b[n-1];}则p可以直接声明为int, 且赋值时用p=found(a,n); 输出时用printf("%d", p);
可以看到这样改动的比较多。

你的代码里犯了c语言里的一个很常见的错误:函数返回了一个局部变量地址
int *add(int a, int b)
{
int c = a + b;
return &c; //返回c的地址,c在add函数执行完以后就没了,返回它的地址是没有意义的
}
int* p = add(a, b); //p指向的内存随时可能被改写,你看到的正好就是输出完以后它就变了,(因为add函数从执行完到输出间隔的时间"很短",3还存在,而从程序暂停到你观察这段时间"很长",内存已经被修改了,你可以再输出一次*p看看)
你把c定义成静态的,再看看
int *add(int a, int b)
{
static int c = a + b; //静态的c
return &c; // 函数结束后,c还存在
}

你这个问题,就是典型的不了解编译过程的人容易犯的错误,关于指针和内存分配的问题,楼上已经讲了很多了,这里补充一点:你这段代码里:str=“Hello world!"; 这样的定义,hello world 字符串是属于const char,编译的时候,会编译在const数据区,这一段的数据是受系统保护的,是不允许更改的!你的程序对const 数据进行操作,程序会崩溃的!
根据你使用的操作系统的不同,编译器的不同,有些系统下编译,可能你这个程序能用,比如某个无数据保护的单片机,但是对于大多数操作系统来说,这个程序肯定是有问题的。
所以同学,要养成好的编程习惯,千万别写这样的代码,会害死你的。

你对于 str 的理解有问题,str 仅仅是一个指针而已,它指向的是一个常量字符串,也就是说"hiello world!" 仅仅是一个地址,是在常量区存储该字符串的地址而已。因此后面你想对该字符串的内容进行操作,就出问题了。所以它不是因为在数组 str 中产生了溢出,而是后面的常量不允许你修改。
为了验证"hello world!" 仅是一个地址,楼主可以以%c 的格式输出 "hello world!"[3] 或输出"hello world!"[6]试试就知道了。

编译器为你的str分配了11个字节型内存单元,你插入后就溢出了,可以改为:
char str[100]="hello world!";


C语言指针函数的问题。
你这个问题,就是典型的不了解编译过程的人容易犯的错误,关于指针和内存分配的问题,楼上已经讲了很多了,这里补充一点:你这段代码里:str=“Hello world!"; 这样的定义,hello world 字符串是属于const char,编译的时候,会编译在const数据区,这一段的数据是受系统保护的,是不允许更改的!你的...

c语言指针问题,求解答
首先 函数指针的定义 A、D定义为:A 定义指向函数的指针pf,所指向的函数参数为空,无返回值 D 定义指向函数的指针pf,函数参数为int,char型(不符题意,题目为int,char*),无返回值 B、D的定义为:定义函数pf,函数参数为空,返回类型为void *(void 型指针)单从函数指针的定义可排除BCD。其次...

C语言指针在函数调用中的问题
这说明你对指针和函数参数传递的理解不到位 这个程序里你想用函数F改变p,那么就要给F传递p的地址,p的类型是int*,那么它的的地址类型是int**,传递&p给F:int main(){void F(int **p); \/\/int**int *p=NULL;F(&p); \/\/传地址printf("%d",*p);delete p; \/\/释放return 0;}vo...

C语言指针拼接函数问题,求教大神
strcat(p1+2,p2+1)p1+2,也就是p1向后移动两个字符位置的指针作为一个字符串的起始指针,即字符串为"cd"p2+1,也就是p2向后移动一个字符位置的指针作为一个字符串的起始指针,即字符串为"BCD"该函数调用将p1+2作为目的串,p2+1作为源串,将后者连接到前者的后面,则连接后为"cdBCD"。strcpy...

C++指针、数组、引用、变量作函数参数的问题
1, 变量作为参数,这是单向值传递。即将数据传给被调函数后,与调用函数就不相关了,必须通过函数值返回操作结果。如有函数声明:void swap(int a,int b); \/\/功能是交换a,b值,但事实上对调用函数没有影响,因为swap函数的局部变量a,b在该函数执行完释放掉了,其值也就丢失了。2. 指针、数组...

C语言指针型函数问题
1.如果去掉static的话,return a[n]返回的就是一个局部变量的地址,那么它的值可能被修改。2.字符串就是一个指针,也就是一个地址 char *str="i love you";printf("%s\\n", str);printf("%c\\n", *str);str表示字符串,是指针(地址)str表示字符串的第一个字符,也就是'i'...

c语言文件指针和函数问题
首先你先明白这几个函数的调用形式,然后你依据各个调用参数你就可以明白函数是如何确定读入哪一个字符的了;1.fread(buffer,size,count,fp);(一般调用形式)各个参数如下:(1)buffer:是一个指针,对fread来说,它是读入数据的存放地址。对fwrite来说,是要输出数据的地址。(2)size:要读写的...

C语言,函数指针定义中实参表为空的问题。
首先道歉一下, 之前差点误导你, 这几天有事也没看回复。之前的回复有误,这个特意温故了一下指针的知识,来重新更新一下答案。真确的写法:错误的写法:有上可知:1、定义成void(*pf)()是不能接收fun(int, char*)的, 必须要有相同的参数。2、返回值定义成void类型是可以的,void是任意类型,...

c语言 指针型函数的问题 为什么下面这个程序有错误
内存中的那个地址可能有东西也可能没有东西)。这个max比较了两个指针的地址值,而恰恰这两个地址值是你输入的值,所以会输出正确结果。最后return c是不需要加*的,因为你的函数定义int *max(int*a,int*b)表示「输入两个int指针,返回一个int指针」,而c就是int指针,所以返回c是正确的。

请教C语言指针问题,本人智商不够
函数指针是 本质就是一个指针,这个指针指向的地址是一个函数的入口地址,就这么简单。include<stdio.h> \/\/声明a是一个函数指针。函数返回值为int类型,参数为int类型。int (*a)(int);\/\/定义一个foo函数 int foo(int a){ printf("a=%d\\n",a);} int main(){ a = foo;a(12);return 0...

奈曼旗19235877238: C语言 返回指针的函数 问题 -
权郊三九: 返回指针 要看这个局部指针变量在函数运行后 保存了哪个空间的地址了 指针里的值是可以返回的 就像你说的 “ return i,主调函数知道一个i就可以了 ” 同样主函数 知道一个指针里的地址就可以了. 但是这个地址入口的空间现在可用否,那要看具体情况了 1 此地址所指向的空间 是个局部变量 也就是存在栈区,那么在申请次局部变量的函数结束时,局部变量被释放,用户没有使用他的权限了 出错 2 此地址所指向的空间 不是局部变量,比如是个静态变量 全局变量 或者是malloc申请的存在堆中的,那么他就不是你随着函数的离去二离去了,他任然存在,结果可用 正确

奈曼旗19235877238: C语言函数指针问题调试下列程序,使之具有如下功能:任意输入2个数,调用两个函数分别求: ⑴ 2个数的和; ⑵ 2个数交换值. 要求用函数指针调用这... -
权郊三九:[答案] (*p)(),(*s)()里面都要加上要调用的函数的参数,类型与个数都一样才可以

奈曼旗19235877238: C语言的指针问题 -
权郊三九: 指针,说白了就是储存数据内存段的地址.打个比方说,你家的门牌号是306,那么你家中回来一些客人,这些客人就相当是一些变量,而门牌号就说明了地址,如果张三在你家,另一个人要找到他,那么此时我们只需要告诉那人306,就相当...

奈曼旗19235877238: 关于C语言中指针函数的问题 -
权郊三九: 不行, 原因是found函数已经声明成返回一个int指针的函数了,如果不声明p为指针则在p=founc(a,n)时会因为类型不匹配而报错.两种方法可以解决:1,直接省略掉变量p,在printf语句中直接用printf("%d", *found(a,n));来输出结果;2,修改found函数为:int found(int b[10], int n) { return b[n-1]; }则p可以直接声明为int, 且赋值时用p=found(a,n); 输出时用printf("%d", p); 可以看到这样改动的比较多.

奈曼旗19235877238: C 语言的简单指针函数问题 -
权郊三九: #include#include#include int main() {int max(int pa,int pb); int a,b,c ; int (*p)(int,int);//这就是指向函数的指针,括号中的类型写出,代表的是指向那一类函数,这是不能省略的scanf("%d",&a); scanf("%d",&b); p=max; c=(*p)( a, b);printf("max=%d\n",c);system("pause"); } int max(int pa,int pb) { if (pa else return (pa); } 这样就可以直接运行处答案了

奈曼旗19235877238: C语言指针问题 -
权郊三九: int maxnum(int* m1,int* m2, int* m3) {int max;max = *m1>*m2?*m1:*m2;max = max>*m3?max:*m3;return max; }void main() {int a,b;int *pa,*pb;int m1,m2,m3,max;pa = &a;pb = &b;printf("pa pb:\n");scanf("%d %d", pa,pb);printf("...

奈曼旗19235877238: C语言指针问题 已知函数f的原型是“void f(char *a,double *b);”且有变量s和t的定义“char s[]="Good";double t;”,则分别用s和t作为第一参数和第二参数... -
权郊三九:[选项] A. f(s,&t) B. f(&s,&t) C. f(&s,t) D. f(s,t) 为什么s的调用不用写成: &s???

奈曼旗19235877238: C语言中指针函数调用问题???
权郊三九: 两个函数返回的都是地址. 并没有指针和首地址的说法. 那么为什么第一个程序需要解引用输出. 而第二个则直接可以输出呢? 因为,第一个程序是输出单个字符%c,所以必须对地址进行解引用.而第二个程序,输出的是字符串. %s就是通过字符串的地址输出整个字符串.直到遇到字符串结束符.

奈曼旗19235877238: c语言 指针函数一个问题 -
权郊三九: 输出 2 1 4 3理由是先把指向y和x的指针传入fun 但是其实是反过来传(实参跟形参的顺序),所以fun里的x实际是y,y是x所以先输出y 然后x 得到2 1然后y=3,x=4 在输出 x y 所以得到 4 3

奈曼旗19235877238: C语言指针型函数问题 -
权郊三九: 1.如果去掉static的话,return a[n]返回的就是一个局部变量的地址,那么它的值可能被修改.2.字符串就是一个指针,也就是一个地址char *str="i love you";printf("%s\n", str);printf("%c\n", *str);str表示字符串,是指针(地址)*str表示字符串的第一个字符,也就是'i'

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网