c语言指针,下面这题看不懂,求解😭 C语言中指针问题(真的求,搞不懂,求解答)?

作者&投稿:岑轰 (若有异议请与网页底部的电邮联系)
  1. while (*y++)

    因为++运算符优先级比*高,所以先对指针y加1,再取出指针y指向的 字符

    如果取出的字符不为0(\0) 就循环

    因为字符串数组 a[]={hello} 是依字符'\0'结尾,字符'\0'的ASCII 码值 是0

    这样当指针y 指向'\0'时 就结束循环。

  2. return (y-x-1)

    y x 都是指针,是内存地址,y-x-1 就两个指针相减再减1 ,返回运算结果。

  3. 从实际执行结果看 返回的是5

    这样y-x=6

    其实实际循环了5次,但是y 和 x 两个指针却相差6

    是因为++的优先级比*高导致的。

  4. 希望我的回答对你有点帮助,很高兴和你一起讨论和学习C语言。

    C语言的指针是比较难理解的知识点,需要多练习才能掌握。 



首先a[]中存储是这样的。

while(*y++);

这个是指针遍历整个字符串数组,直至'\0'结束,结束时多进行了一次++所以后面要-1。

return(y-x-1);

前面循环完成后y是x字符串的下个地址,相减再-1即是字符串长度,如图:



C语言函数里面的指针。你这种情况就可以暂时理解成,在main函数里传走的参数是具体的,在你写的函数里面发生了修改,所以说在main函数在得到的数据中也是被修改后的数据。如果没有把指针带走的话,就好像两个小孩抄作业,不论抄作业的小孩是怎么抄的,被抄作业的那个人作业的内容是不变的。但是带指针的话,就好像别人抄他作业的时候直接写在他的作业本上了。抄作业的那个同学没有自己的作业本用的是别人的作业本。我这么说可以吗?好像也不太清楚,如果你还有其他疑问的话,可以继续追问

*y是指针,
所以while(*y++)是找串尾符
returen()是函数的返回值,也就是说你建的这个fun()运行完数值就等于这个返回值
总的来说,是一个计算长度的程序,可以寻味一下return(y-x-1)里面的-1是怎么来的

#include<stdio.h>
int fun(char *x)
{
char *y=x;
while(*y++); //指针不断后移,直到遇到串尾符为止(后自增,指针停在串尾符的后面一位)
return(y-x-1); //返回字符串的长度("ABCD"的长度为4)
}
void main()
{
char a[]={"hello"};
printf("%d",fun(a)); //输出5
}

C语言有关函数指针的一个题目,看不懂,求解答~

typedef struct Node{ ElemType data; struct Node *next;}Node;typedef struct Node *LinkList; /* 定义LinkList */Status ListInsert(LinkList *L,int i,ElemType e){ int j;LinkList p,s;p = *L; j = 1;while (p && j next;++j;} if (!p || j > i) return ERROR; /* 第i个元素不存在 */s = (LinkList)malloc(sizeof(Node)); /* 生成新结点(C语言标准函数) */s->data = e; s->next = p->next; /* 将p的后继结点赋值给s的后继 */p->next = s; /* 将s赋值给p的后继 */return OK;}//主要代码如下。

第二章temp是一个指针,没有赋值的指针,操作的时候不加*,如果编译器不报警告就可以正常运行。

c语言指针,下面这题看不懂,求解
答:如果取出的字符不为0(\0) 就循环 因为字符串数组 a[]={hello} 是依字符'\0'结尾,字符'\0'的ASCII 码值 是0 这样当指针y 指向'\0'时 就结束循环。return (y-x-1)y x 都是指针,是内存地址,y-x-1 就两个指针相减再减1 ,返回运算结果。从实际执行结果看 返回的是5 这样y-x=6 ...

C语言一道简单指针选择题,但我却看不懂,帮帮忙!
答:int *p=&a[3],就是说用指针p指向数组a的第4个元素,即4 b=p[5];就是给变量b赋值,这个值是指针p所指向的元素,再往后5个位置,p指向4,再往后5个位置就是9,选C

C语言有关函数指针的一个题目,看不懂,求解答
答:int i,ElemType e){ int j;LinkList p,s;p = *L; j = 1;while (p && j < i) /* 寻找第i个结点 */{p = p->next;++j;}

C语言指针的问题 能帮我分析下以下的代码吗,看不太明白
答:gets(p); //输入字符串,在最后一个字符后面会自动加'\0'while(*(p)!='\0') //对指针p解引用,并判断是否为'\0',即判断字符串是否已经结束 { n=n*8+*p-'0'; //*p就是p所指向的字符,*p-'0'就是p所指向的字符的ASCII减去0的ASCII,就是这个字符所代表的真实数字 p++;...

C语言:指针数组的指针 看不懂,请解释一下这题: 主要是这句:t = (p...
答:32位机器下 sizeof(int) 等于4 t = (p += sizeof(int))[-1];相当于 t=(p+4)[-1];p+4 指向"ij","kl“ p+4 数据类型 还是char 这时候(p+4)[-1] 就取到了 "gh”了 数据类型是 char[3];如果楼主对于[-1]无法理解 那你可以尝试理解一下“abcdef"[1],结果是字符'b'...

C语言指针问题。 例7.6 画圈圈的不懂,特别是在有三角形处?求解释_百度...
答:在赋值指针时,a和a[0]的概念也不同。还是拿图中的题目做例子。如果p=a,这时的a的意思有两个。第一,它代表这个数组的首地址,第二,它代表着第1行第1列的元素的地址。而a[0]代表的意思也是两个。第一,它代表数组第1行的首地址,第二,如果将这个数组看作是一个一维数组,我们还可以把a[...

c语言指针选择题求解
答:1.选C。int a,*p;定义了一个整型变量a以及整型指针p;因此p=&a;p可以存放a的地址。2.选B。int a,*p=&a;因为a是一个变量,不存在*a这一个用法。3.选D。pp未定义错误。C是正确的,p1、p2以及p都是整型指针。4.a是整型变量,p是一级指针a的地址。q是二级指针p的地址。5.q指向null。

C语言指针的一道简单题目。 这一程序看不懂,请赐教。
答:p和q指向同一个位置,输入abc时这个位置上的字符串是abc,输入def时这个位置被def覆盖,所以p和q都输出def。

C语言关于指针的问题。第7题 看不懂倒数后两句,请指教。
答:s&&*t&&*t++==*s++ s和*t很容易理解就是判断两个指针有没有指向字符串结束符'\0't++==*s++就是判断两个指针指向的字符是否相等,并且将指针后移 也就是说当两个指针指向的字符不相等,或者有指针指向了字符串结束符时,结束循环,直接输出两个指针指向内容的差值 ...

C语言指针问题,本人菜鸟,不懂,请大虾指教!!!急
答:可能会覆盖p,所以结果是不确定的.堆栈是函数共用的,在一个函数中分配的内存,在函数结束后会释放掉,在进入另一个函数时,分配的内存可能会与上一个函数分配的内存重叠。 这就造成了在这个函数中使用这段内存时,可能会覆盖上个函数的内存,但也不一定会全部会覆盖,这要看情况了。下面是一个测试...