c语言指针题目,C语言关于指针的题目

1,C语言关于指针的题目你的排版太差了如上图,17行开始的 for循环 判断 子串 是否匹配就存在问题,当 *lin 与 *yi 相同时,不仅 yi++, 还要 lin++ (这是你漏掉不存在的部分) ,  之后的代码就没看了 , 可读性较差 ,  另外 13和 14行 完全没必要 使用 yi 和lin变量,可以直接操作 str和 substr
2,c语言关于指针的例题void swap(int*,int*)函数接受的是一个指针 , 就算你可以理解成它拷贝了值,是,它拷贝了&x,&y到*a,*b里了 , 但是,你没有发现,*a其实还是指向x吗?这样一交换,不就结了吗 。举个例子 。假设x的地址为0x0069857(乱编的),然后,传递进函数的时候,它只是传值,并没有传引用,然后呢,int *a把0x0069857复制为自己的值 。这样一来 , 还记得解引用吗?*(a)=*(0x0069857)=x,因此t=*a不是就可以翻译成t=x;x=y;y=t;}不是就交换了吗?????指针指向的内存地址的值发生交换,但指针自身指向的地址是不变的,没错啊 。指针自己的值没有变,原来指向20#的现在还是指向20#,但20#桌坐的女生已经和30#桌的换了 。#include<stdio.h>void main() /*main写错了!*/int a[3][3]=int *p;for(p=a[0];p<a[0]+9;p++)printf("%3d",*p); /*p也是,应该是小写才对 。。*/}
3,一道c语言的指针题目因为指针是一种指向地址的过程 , 函数的实参传输是地址,如p1和p2,而非值的传递,如果把a和b作为传递值 , 则需要return函数来返回……楼上2个说的都是指针问题 好像偏题了你的意思是没有return 程序也能正确执行是吧因为return就像它的字面意思 返回你定义的函数swap(int *p1,int *p2) 是无返回值的函数就相当于void swap(int *p1,int *p2) 这个函数是没有返回值的 如果定义int swap(int *p1,int *p2) 在函数定义中就必须有return 语句来返回一个值return x;这个函数的目的不是为了返回一个值 是为了交换p1,p2所指向的2个数所以不需要返回值 你执行这条语句的作用就是把p1,p2指向的2个数值对换执行完毕就完了一般有返回值的函数都是作为赋值操作符的右值来用的 比如 int max(int a,int b);m = max(1,2); 这样 就是有返回值的函数~因为传递的指针,但在函数内,交换的是指针所指向的变量的值,但指针并没有交换,已经达到想要的结果,所以不需要返回值.就是说指针pt1还是指向a变量,指针pt2还是指向b变量,但在调用函数后,大的值已经换到a变量中了.因为指针是在传地址,你swap(int *p1,int *p2) 函数中改变的是这个两的地址里面的值,所以跑完这个函数后 , 地址没有变,但是里面的值已经改变【c语言指针题目,C语言关于指针的题目】
4,C语言有关指针的题目答案选择 BA是数组首地址,所以数组的第3个元素是 (首地址 + 2) 即 ( p=A+2 )A的第3个元素也可以这样表示 A[2], 要使p指向它,就用取地址符,即 & ,所有也可以这样p=&A[2];所以答案是 B .答案选DA+2=&A[2]而P=A[2] 因为是数组,所以不用加&选择 B/*src 源字符串指针dest 目标字符串指针,缓冲长度必须要足够 , 必须要大于等于 n-mpos 开始拷贝位置m返回值:-1 字符串指针为空-2 pos超出src范围>0 拷贝的字符串长度,也就是dest字符串的长度*/int copysubstring( char* src, char* dest, int pos )int i, j;/*判断指针是否为空*/if( !src || !dest )return -1;/*判断pos是否为负数*/if( pos < 0 )return -2;/*安全的寻找pos开始的位置,防止越界*/for( i = 0; src[i] && i < pos; i++ );/*判断pos是否大于src的长度*/if( !src[i] )return -2;/*开始从src的pos位置拷贝字符串到dest*/for( j = 0; src[i]; i++, j++ );dest[j] = src[i];}/*设置dest的结束符*/dest[j] = 0;/*返回拷贝的字符数量*/return j;}d5 , c语言的指针题目/*src 源字符串指针dest 目标字符串指针,缓冲长度必须要足够,必须要大于等于 n-mpos 开始拷贝位置m返回值:-1 字符串指针为空-2 pos超出src范围>0 拷贝的字符串长度,也就是dest字符串的长度*/int CopySubString( char* src, char* dest, int pos )int i, j;/*判断指针是否为空*/if( !src || !dest )return -1;/*判断pos是否为负数*/if( pos < 0 )return -2;/*安全的寻找pos开始的位置,防止越界*/for( i = 0; src[i] && i < pos; i++ );/*判断pos是否大于src的长度*/if( !src[i] )return -2;/*开始从src的pos位置拷贝字符串到dest*/for( j = 0; src[i]; i++, j++ );dest[j] = src[i];}/*设置dest的结束符*/dest[j] = 0;/*返回拷贝的字符数量*/return j;}#include <stdio.h>#include <string.h>void main() int m; char * p; p=c; puts("please enter the string:\n"); gets(c); puts("enter the number:\n"); scanf("%d",&m); if(m>strlen(c)) puts("error"); elsestrcpy(str,p+m-1);puts(str);}#include <string.h>int CopyStr(char * dst,char *src,int m)if(m > strlen(src) //报错return 1;elsestrcpy(dst,src+m);//dst 是目标字符串 。}}

    推荐阅读