c语言全局指针,C语言全局指针定义
更新:2023-01-08 20:18
本文目录一览:
c语言定义了两个全局的指针变量,为什么这两个指针变量指向同一地址
C里面好像全局变量会被自动赋值为0,而函数内部的临时变量则不会被赋值,而是随机的数值。
c语言指针
第一个题:(考的是指针)
void int sp(int *a) {
int b = 2;
a = b; // a 指向 b
*a = *a * 2; // 即将 b 的值乘以 2,b 变为 4
printf("%d,", *a); // 输出 a 指向的变量的值,即 b 的值 4
}
// 所以 sp() 函数其实就是输出 4
printf("%d,%d\n", k, *p); // 首先输出 k 的值 3,然后输出指针p 指向的变量k的值3
// 注意,指针p 虽然作为参数传入 sp()函数,但只是将其值赋给函数的形参指针a
// 指针a 此时虽然也指向了变量k,但其随后又指向了变量b,并修改的是 b 的值
// 因此,指针p 的指向并没有改变,依然指向变量k
输出结果就是 4,3,3
第二个题:(考的是指向指针的指针,即指针的指针)
(由于有指针的指针,建议画图来理解各变量和指针间的关系)
int i = 3, *p = i, **r = p;
// p 指向整型变量i;r是指针的指针,r 指向指针p
// 这里把 f(r); 替换为完整的函数定义,便于理解
void f(int **s) { // r 和 s 现在拥有相同的值,即它们指向同一个指针,由于 r 指向的是指针p,所以 s 也指向指针p
int *t = k; // 指针t 指向全局变量k
*s = t; // *s 即 p,因此这条语句等同于 p = t,也就是指针p 的指向被更改了,它现在和指针t 一样,都指向全局变量k
printf("%d, %d, %d, ", k, *t, **s); // 输出 k的值 7,*t 的值 7(t 指向 k),**s 的值 7(**s == *(p) == 7,因为 s 指向 p,p 又指向 k)
}
// 由于你的图最后没拍完整,我就当最后是 **r ,即使如果不是,只要你理解了也能自己分析
printf("%d, %d, %d\n", i, *p, **r); // 输出 i 的值 3,*p 的值即 k的值 7,**r的值即 k的值 7,**r 的分析和 **s 一样
// 最后输出应该是 7,7,7,3,7,7
这道题就是通过使用指向指针的指针,从而修改所指向指针的指向,对于这道题来说就是指针p的指向。
C语言,全局指针变量可以被修改吗?
可以。程序例子:
#include stdio.h
#include stdlib.h
int *p;
main() {
int a, b;
p = a;
printf("%p a=%p\n", p, a);
p = b;
printf("%p b=%p\n", p, b);
return 0;
}
输出:
0012FF7C a=0012FF7C
0012FF78 b=0012FF78
C语言指针的定义
指针就是地址。
你说的是指针变量。
整形变量,浮点变量,字符变量,指针变量。通过起名的规律就知道指针变量是储存地址的。
指针变量和其他变量的用法一样,作用域一样。在一个子函数中定义指针变量,是局部变量,其他函数是不能用的。
不要把指针变量想得太复杂,地址(指针)也是数据,和其他字符数据,整形数据一样,没什么差异。
当然,全局变量的指针变量当然可以多函数使用。
指针的定义:地址。
指针变量的定义:存储指针的变量。
C语言编程时使用全局变量和使用指针各有什么特点?
全局变量在整个程序中都可以用,也可能声明全局指针。
指针指向一个特定的地址。
C语言指针问题
int *p;
main() {
int x = 1, y = 2, z = 3;
p = y; // 这里让指针p指向y
fun(x + z, y); // 传参数为 int 型的 x+z == 4 ,和y的地址
printf("(1) %d %d %d\n", x, y, *p); // x = 1, y = 6, *p = 6 这里是因为传参数时传的是地址而且p是全局的指针所以在子函数里面会改变原来变量的值
}
fun(int x, int *y) {
int z = 4;
*p = *y + z; // 指针p是全局变量 *p = *y + z == 2 + 4 == 6, 这里之后y的值被改变成6了,因为p---y
x = *p - z; // x = *p - z == 6 - 4 == 2
printf("(2) %d %d %d\n", x, *y, *p); // x == 2, *y == 6 , *p == 6
}