-
我头晕。 A 和 B 只是两个指针。 如果不初始化它们,则它们不会指向任何内存空间。
这种指针称为字段指针)。将它们分配给 value 已经是非法的。 即 *a=10, *b=20; 这句话是不合法的。
从头到尾,没有为a、b...分配内存。希望对你有所帮助。
-
指针交换函数参数是指针的指针。
整数交换也是如此。
只需要修改以下内容:
main()
int a,b;
a=10,b=20;
-
就我个人而言,我认为 *a=10, *b=20; 这句话有问题,不能用指针直接指向一个值,你可以从m=10,n=20开始; *a=m,*b=n; 个人理解。 请批评和纠正。
如上所述,p 和 q 仍然是字段指针,除非在开头给出 p 和 q,否则不会分配特定的空间为了使它成为 *p、*q=10 和 20,对吧? 指针不需要初始化,但在使用之前是否必须分配内存?
否则,它是一个字段指针,可能指向系统内存? 随意换手指不是很危险吗? 个人理解,请指教楼下,谢谢。
也请专家提供更多建议。
-
如果没有 *p=*q,两个指针指向同一个地址,并且 *q=t 是用 *q=t 完成的,*q 和 *p 将同时更改,*a=*b=10
楼上同学的指针不用初始化分配,*p=10正确,间接访问操作可以读写。
-
这三个问题的统一答案。
通过输入自己运行它。
基础知识不再是基础。
第一个问题检查逻辑运算符的优先级。
第二个问题检查输入格式。
第三个问题考察编程思维。
-
对于 num[.]'e'-'a']+
e'-'a'实际上,它是与字母 E 相对应的 ACS
代码减去与字母 A 对应的 ACS
代码,即'e'-'a'相当于101-97=4;
所以 num[.]'e'-'a'] 和其他引线弯曲了 num[4] 和 num['e'-'a']+
相当于 num[4]++
因为 num[4] 是一个变量,所以 num[4]++ 是一个类似于 a++ 中的淮清的自强加表达式,即 num['e'-'a']+
是一种自我强加的表达方式。
-
1 .首先,我们定义一个指针数组,pt[3] 类似于数组,数组名称代表第一个字符,指针名称代表第一个指针,所以 pt 应该是 pt[0],pt[0] 对应 t[0]。
在 *(pt+l)+2) 中,我们看一下 pt+l 对于数组,每行的内存是连续分配的,所以 pt+l 是当前 pt 行的下一行,即 t[1]。
*(pt+l)+2 是指向 Pt+1 的行中的第三个字符,即 t[1][2],因此 *(*pt+l)+2) 是指向 t[1][2] 的行中的第三个字符。
ps:for 循环中执行的含义是:pt[0] a,b,c
pt[1]→ e,f,g
pt[2]→ h ,i, j
pt 对应于 pt[0],所以 pt+1 = pt[1]。
2.在定义 sum 时,由于 sum 没有初始化,编译器会随机分配 sum,所以 sum 会被赋值给一个随机数,和 之后的 sum 当然是不确定的。
第一次调用 fun 函数时,在输入参数 (a+fun(d)) 时,fun(a+fun(d)) 应该会遇到 fun(d)。
在这种情况下,由于静态 int d=5 尚未执行,因此传入的参数 p(即 d)仍为 1,然后执行 d+=p;
在这种情况下,输出 d 等于 6
之后,我们运行 fun(a+fun(d)) 进入外部 fun 函数,然后参数 p 等于 a+fun(d),即 9
此时,d 等于 6,所以 d+=p 等于 15,所以 15 是输出
然后返回值是 d,所以它也是 15
所以最终结果是 6 15 15
ps.需要注意的是,静态 int d=5 其中 d 被声明为静态变量,也就是说,在编译时,变量 d 已经分配了内存,那么当 fun() 函数被重复执行时,这个 d 变量就不会被重复定义,也就是当 fun 函数第二次执行时, 不需要执行静态 int d =5。
-
在第一个问题中,t 是一个数组,pt 是一个指针数组,循环后,指针数组指向数组 t。 也就是说,pt 和 t 应该是相同的内容,但 t 是 const。 *(pt+1) 是 t[1],*pt+l)+2) 是 t[1][2]。
对于第二个问题,sum 未初始化,因此答案为 C。 请记住,永远不要使用未初始化的变量!
第三个问题,选择c,key是静态int d,地址分配好后,里面的内容要等到程序执行结束才会发布,这就是变量生存期的问题。
最后,最好自己把这些问题输入到编译器中,然后用调试功能观察每个变量的变化,这样会更容易理解。
-
哦,我很高兴,我刚刚学完C语言。 我来看看 Ah A: int t[3][3], pt[3], k;
for (k=0;k<3;k++)pt[k]=&t[k][0];
我们来分析一下执行过程:
for (k=0;k<3;k++)pt[k]=&t[k][0];
第一个循环:pt[0] = &t[0][0] 将第一个地址分配给 pt; ,pt+l)+2) 等价于:t[l][2] “因为 *(pt+l) 等价于 t[l],所以它是 t[l]+2,加上 * 是 t[l][2]。
第二个循环的结果相同,,*pt+l)+2) 结果是 t[l][2])
二:main()。
sum 的值没有初始化,所以它的值是不可预测的,用 sum 运算后的值也必须是不可预测的
同学们,还有什么不明白的吗?
-
*(pt+1)== t[1][0]; pt+1)+2) = t[1][2]
11.事实上,一般的编译器答案将是 a,但 int sum; 没有初始值,默认值是否为 0 取决于编译器,因此不确定。
-
17 c * (pt+1) 指向 t 加 2。
11 C 问题是不确定的,因为初始值是随机且不确定的。
-
11.之所以选择 C,是因为没有初始化,因此 sum 的值是不确定的。 19.选择 C