① 關於c語言指針的簡單的例子
p++就是每次把地址加一,那麼你scanf()以後輸入的內容放到的是地址增加的指針裡面,這樣就完成了自動*(p+i)=a[i]的過程。
② c語言里,如何把指針變數的地址賦給一個變數
指針變數的地址只能賦給指針變數。
#include "stdio.h"
int main()
{double pi=3.1415926,*p,**q;
p=π/*把double變數的地址賦給p */
q=&p; /*把指針變數p的地址賦給q */
printf(" pi=%.7lf *p=%.7lf **q=%.7lf ",pi,*p,**q); /*檢查賦值的效果 */
system("pause");
return 0;
}
③ C語言指針指定地址
首先,不能這樣做,你c語言操作的地址並不是真實的地址,是操作系統從內存的某一段虛擬給你的地址,每次都不一樣,每個程序所使用的內存互不幹擾。
第二,而你的程序退出後,所擁有的空間就被系統全部回收了。也就不存在了。否則,你c語言亂改一通,要是改到系統正在用的內存,系統不就出現異常了嗎。內存並不是由你管理的,而是操作系統管理的。
假設 a程序的 p指針,指向 0xaaa地址 ,你修改 b程序的 p指針,指向0xaaa,也是無法修改的,每個程序的內存都是系統虛擬的。保證程序可以安全穩定的執行。
④ C語言 多級指針 指針變數賦地址值的方式
**p就是一個雙重指針啊,意思就是說這個指針變數裡面放的是一個指針的地址(一般的指針變數裡面放的是一個變數的地址),這么說不知道你明不明白。
通過指針變數獲得地址值:
int
**p;//雙重指針
int
*q;//普通指針
p=&q;//將指針q的地址賦值給p
通過標准函數獲得地址值:
int
**p;
p=(int*)malloc(n*sizeof(int*));//動態創建n個int類型的指針變數空間
其實說白了雙重指針就是二維數組的頭指針,數組的每一行的開頭就是那一行所代表的一維數組的指針,二維數組頭指針就是每一行的頭指針的地址數組。
哇
我自己都覺得指針這個東西好繞。。。。不過多用就明白了。
⑤ C語言中的指針*和取地址&,誰能真正明了的告訴我用法,請舉一個例子,
*的意義較多,只有放在指針前面時才是取指針指向的目標變數的值。&也有兩個作用,只有放在變數前面且左值變數是匹配的指針時才是取變數地址的意思。如:
int *p,x=3,y;——要注意,這里p前的*不是p的而是int的,是聲明了一個int *型指針p。
若再寫p=&x;,這就是把x的地址賦給p;若再寫y=*p;,那就是把p指向的x的值3賦給變數y。
⑥ c語言在對指針*P在進行賦值時,什麼時候用變數名賦值,什麼時候用變數的地址賦值比如下面的例子
int * 類指針變數即可以指向一個int,也可以是int數組。
同理 char * 類指針變數即可以指向一個char也可以指向字元串。
因為指針變數指向的數據不限定長度的,比如int *p ,那麼這個p可以保存一個int變數的地址,也可以保存int一維數組的首地址,本質一樣的,因為一個變數的地址類型與一維數組地址類型相同。
C/C++編譯器不負責邊界越界檢查,這個工作由程序員負責,換句話說,編譯器無法根據一個指針判斷指向的內存是單個變數還是數組。
以上是指針賦值的要求,其實很簡單,類型一致就可以賦值。
取地址部分
對於單個變數,需要取地址時,必須用&顯式地告訴編譯器,否則編譯器隱式轉換按取值處理,即默認取值。
對於數組,如果不給定索引只給數組名,則默認取地址,因為編譯器無法確定你要取那個元素,
因此如果要賦值給指針,對於單個變數,那麼只用變數名就是取值,包括指針變數(指針賦值給指針),要取地址需要加&。對於數組直接賦值即可。
重點:等號左右兩邊類型要一致,即左右值類型要相同。
⑦ C語言中,給指針賦值或者賦予地址的幾個寫法的辨析
*p=&r;//*p是double類型,&r是double*類型,二者不匹配,錯的
*p=r;//*p是double類型,r是double類型,二者匹配,對的
p=r;//p是double*類型,r是double類型,二者不匹配,錯的
p=&r;//p是double*類型,&r是double*類型,二者匹配,對的
1 2 3 '