⑴ c語言中,指針指向的地址.那個地址是什麼地址
那個地址 是被指向的變畢耐量的地址。
當指針剛聲明完畢時,它並無指向的地址,只有當指針與 某有存儲地址的變數發生聯系時,才有指向地址。
例如:
int *p; // 這時 p 沒有指向地址
int a=3,b=14;
p = &a; 這時 p 指向了 變數 a 的地址了.
// 數值 *p 等於 a 里存放的數值。 printf("%d", *p); 得升棚 3。
這手笑春時,若 a = a+1; 輸出 printf("%d", *p); 得 4。
p = &b; p 指向了 變數 b的地址 了,輸出 printf("%d", *p); 得 14 啦。
⑵ 什麼叫指針定址
指令定址分為兩種。
順序定址方式
由於指令地址在內存中按順序液巧安排,當執行一段程序時,通常是一條指令接一條指令地順序進行。也就是說,從存儲器取出第1條指令,然後執行這條指令;接著從存儲器取出第2條指令,再執行第二條指令;接著再取出第3條指令。
這種程序順序執行的過程,稱為指令的順序定址方式。為此,必須使用程序計數器(又稱指令指針寄存器)PC來計數指令的順序號,該順序號就是指令在內存中的地址。
跳躍定址方式
當程序轉移執行的順序時,指令的定址就採取跳躍定址方式。所謂跳躍,是指下條指令的地址碼不是由程序計數器給出,而是由本條指令給出。注意,程序跳躍後,按新的指令地址開始順序執行。因此,程序計數器的內容也必須相應改變,以羨孝便及時跟蹤新的指令地址。
採用指令跳躍定址方式,可以實現程序轉移或構成循環程序,從而能縮短程序長度,或將某些程序作為公共程序引用。指令系統中的各種條件轉移或無條鬧派鍵件轉移指令,就是為了實現指令的跳躍定址而設置的。
⑶ C語言中,指向指針的指針如何取出其指向指針的地址
char **b = &a; 這次才是正確的二級指針使用方式,然後*b的值就是a,**b就是a指向的第一個字元。
⑷ C語言指針的地址范圍是多少
C語言的指針地址范圍是4位元組空間,即從地址0x00000000~地址0xFFFFFFFF。但其中有些欄位是系統保護的或所使用的硬體平台根本就不存在,所以用戶指針並不能完全使用這個空間。不過用戶不必擔心,只要按規范使用指針,系統都會自動正確安排。
⑸ C語言中,如何讓指針指向一個已知地址
讓指針指向一個已知地址,必須轉換類型,在地址前面加上int*,否則不成功。
指針(Pointer)是編程語言中的一個對象,利用地址,它的值直接指向(points
to)存在電腦存儲器中另一個地方的值。由於通過地址能找到所需的變數單元,可以說,地址指向該變數單元。因此,將地址形象化的稱為「指針」。意思是通過它能找到以它為地址的內存單元。
⑹ C語言:用指針的方法查找數組中某個數在數組的位置
對於函數:int* find(int a[], int value),其中a為整型數組首地址,value是被檢驗值。我們可以利用指針a間接引用數組第一個元素的值,並將其與value比較,比較完後,將指針向後移動,再通過間接引用的方式比較下一個元素值,依次下去,直到在整型數組中找到被檢驗值或者整型數組所有元素比較結束為止。
那麼這里有個問題,我們如何通過指針知到整型數組什麼時候結束呢?對於整型數組而言,沒有辦法,所以我們必須先知道整型數組的長度,可以在參數中給出,也可以在主函數定義中知曉。
程序如下:
int* find(int a[], int value)
{
int i=0,*p=a;
for(i=0;i<=9;i++)
{
if(*p==value)
return p;
else
p++;
}
if(i>=10)
return 0;
}
main()
{
int c[10]={1,2,3,4,5,6,7,8,9,0};
int n;
scanf("%d",&n);
printf("%x %d",find(c,n),*(find(c,n)));/*第一個為函數返回地址,第二個為函數返回地址里的值*/
getch();
}
另外,我們測試一個程序或者函數是否正確不在於其能否正確運行,而在於其運行的結果是否符合我們的預期。針對上述程序,測試方法如下:
輸入任意一個數,如果這個數在數組C內,看是否能夠列印出16進制的地址數和與輸入值相同的數;如果不在數組C內,看是否返回值為0的地址。
⑺ C語言中對指向多維數組的指針數組中多維數組元素的間接定址問題
可以從一維數組開始看最簡單。
int *a = new int[5];
a代表第一個元素的地址,所以第一個後面第n個可以用 *(a+n);
二維數組
int **a = new int[5][5];
a[i] 相當於一維數組里的 a, 它代表指向第一行元素的一個數組指針。
即:
a[i] ( *a ) 是 int* 型
所以指向第 2 行 數組 的指針: *(a+1)
指向第 i 行 第 j 列 數組 元素 的指針 (從0開始算) *( *(a+i) + j ) 或者 *( a[i] + j )
⑻ C語言中指針的地址問題
首先我要指出的是根指針的地址與指針存儲的地址一般不可能相同~!(一樓列出的情況除外,將指針的地址賦給一個變數再纖宴將變數的地址賦給指針)
舉個例子:
int number,*p;
number=1;
p=&number;
你可以這樣理解,number 和 *p都是一個整型數據變數,程序在內存中
為它們都保留了一個地址(兩個不同的地址),用以存放它們的值,在
number的毀殲銀地址中保存的值是1,在*p的地址中保存的值是number的地址!
你也可以用 &p 求出*p 的根地址。(一般只改讓在二維及以上數組、鏈表等高級主題中用到指針的根地址)
⑼ C語言指針,&*怎麼得到地址的
*yprt是指針,yprt是計算機存儲某個數據的地址,加上*表示指向這個地址存儲的數據
若地址yprt里存儲的是y,&*是單目運算符,符合右結合法則,所以先是運算*yprt,它的值是y,
然後再&y,它的運算結果是得出存儲y的地址,就是yprt。
不懂繼續問
望採納
⑽ C語言指針指定地址
首先,不能這樣做,你c語言操作的地址並不是真實的地址,是操作系統從內存的某一段虛擬給你的地址,每次都不一樣,每個程序所使用的內存互不幹擾。
第二,而你的程序退出後,所擁有的空間就被系統全部回收了。也就不存在了。否則,你c語言亂改一通,要是改到系統正在用的內存,系統不就出現異常了嗎。內存並不是由你管理的,而是操作系統管理的。
假設 a程序的 p指針,指向 0xaaa地址 ,你修改 b程序的 p指針,指向0xaaa,也是無法修改的,每個程序的內存都是系統虛擬的。保證程序可以安全穩定的執行。