欢迎光临散文网 会员登陆 & 注册

C语言指针变量*难题

2023-09-05 20:10 作者:独眼的安提柯  | 我要投稿

先说下这题答案 是 3 5 3 5

讲讲地址传参 与值传参的区别 这题 p q两个地址用形参指针星a b接受 p q不会直接覆盖形参 a b 传参过程就是用ab两个形参指针指向pq的地址 一 先说一个优先级 ++运算的优先级>*运算符 所以a=*p++这个语句等价于a=*(p++) 等价于 a=*p; p++; 如何理解为何是这样 而不是 a=*p;* p++; 呢 我们这样理解 a=f(i++) 这个语句就是a=f(i) 再执行i++ 先用后加 我们这里把*()理解为一种函数f()就行 II 变量和地址是一一对应的无论如何没法改动这个变量的地址(即使用指针也只能改动变量的值地址无法改动)所以我们用指针主要有两个用途 1用指针改动地址存放的变量的值 2改动指针方向 指针的方向是可以改的 今天指针a指向变量x 明天指针a就可以指向变量y

这个例子就改动了指针ab的指向 原本指针a指向x 现在它指向y。所以星a 星b的值变化了但是x y的值没有变也没用交换 例题一

这个函数就是不断改动这个指针s的方向 但是a永远都是a数组首元素地址这个是没法变的但是s指向的内容不断在变

我们慢慢分析 1.第二句 int*f(int*s)定义了这个函数返回值是整型指针指向的地址 形参也是和传入地址实参结合(数组名a) 传参代表指针s指向数组a的首元素1 2.s+=1表示 s=s+1 //指针s向右移动一格现在s指向a的第二个元素也就是a(1)也就是2 所以现在s(0)表示2 我们要知道数组名a对应的就是数组第一个元素1的地址这个是没法改动的地址改不了但是指针方向可以改 3 s1=s1+6 s0表示2 s1就表示a的第三个元素3 所以 s1现在变为6 数组元素s1等价于*(s+1)所以这个函数是可以改动实参 现在a(2)就被修改为了3+6=9 4 *(s--)=*(s--)+7 翻译一下 先用后减 *s=*s+7 这一步把s指向的内容也就是a(1)修改为 2+7=9 s-- //表示现在指针s指向a的首元素a(0) (原本指向a(1)) 5 f(a)的返回值是s也就是一个地址变量a的首地址所以p=a的首地址 6 最终答案 a(1)由上述分析被修改为9 a(2)由上述分析被修改为9 *p=a(0) 所以*p值为a(0)为1 p(1)为a(1)为9 例题二 连续输出一个字符串中的数字字符

补充 one isdigit(char型字符) 若传入的char型字符 为阿拉伯数字0~9,则返回非0值,否则返回0。 two 字符0-9对应的阿克斯码是48-57 下面我们来分析这题 1 gets(s) 表示让你从键盘输入一个字符串 这个字符串名字叫s

2 char 星str=s 定义一个指针变量str 这个指针变量指向s首地址 我们输入ab125sfy78 3 看循环内部 一。先是h被赋值0(每次外循环开始h都重新被赋值0) 然后第一个字符a进入while循环 a不满足判断条件无法进入内层while循环 h任然为0无法进入if控制的if后面一个语句 执行str++ 二。字符b进入 同样的道理 三。字符1进入 h被赋值0 1进入while内循环

四,例题三

选D

C语言指针变量*难题的评论 (共 条)

分享到微博请遵守国家法律