本文目錄一覽:
- 1、c語言定義了兩個全局的指針變數,為什麼這兩個指針變數指向同一地址
- 2、c語言指針
- 3、C語言,全局指針變數可以被修改嗎?
- 4、C語言指針的定義
- 5、C語言編程時使用全局變數和使用指針各有什麼特點?
- 6、C語言指針問題
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;
}
00
我的計算輸出:
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
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/198712.html