❶ c語言指針和常規變數,地址和值的相互賦值有什麼是合法的和不合法的
char a[5]="abcd";這樣是合法的;
*a="abcd",a="abcd"都不合法,因為*a只是一個字元的空間。a代表的是a[]的地址;
*a='c';這樣是可以的;
❷ C語言中指針的地址問題
首先我要指出的是根指針的地址與指針存儲的地址一般不可能相同~!(一樓列出的情況除外,將指針的地址賦給一個變數再纖宴將變數的地址賦給指針)
舉個例子:
int number,*p;
number=1;
p=&number;
你可以這樣理解,number 和 *p都是一個整型數據變數,程序在內存中
為它們都保留了一個地址(兩個不同的地址),用以存放它們的值,在
number的毀殲銀地址中保存的值是1,在*p的地址中保存的值是number的地址!
你也可以用 &p 求出*p 的根地址。(一般只改讓在二維及以上數組、鏈表等高級主題中用到指針的根地址)
❸ 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 啦。
❹ c語言全面解析指針,十個知識點整理
C語言10個小知識了解指針
1.若有代腔虧碼,int a=10,*p;p是指針:也是一個變數,且是一個只能用來存放地址的變數。
2.若有代碼,int a=10,*p;p=&a;當執行了上面的代碼,會說「p指向了a」,其實就是「p指針變數存放了a的地址」。
3.兩個*的區別,有如下代碼:inta=10,*p;//該處的* 說明p是一個指針變數用來存放地址p=&a;*p=*p+1;//該處的* 表示p所指的變數中的值即a的值10。
總結: 變數定義時的* 說明該變數是一個指針,調用語句中的*表示指針指向的變數中的值。[此處是比較容易混淆的]。
4.int a=10,*p;p=&a;則:*p=*p+1;//等價:*p +=1;(0)++++(*p);表示的內容相同,都是p所指變數的值+1。
5. *p++和(*p)++的區別是: 等價於* (p++),先獲取 p當前所指元素的值,然後p指針+1(p指針向後移動一個單元,一般用在數組中,普通變數會越界);後者僅僅是p所指變數的值+1。
6.定義變數時,一個*說明該變數是指針,兩個*說明該變數是指向指針的指針(存放的是指針變數的地址)。int a=10,*p,**q;p=&a;//p指向a,*p的結果是10,q=&p;//q 指向p,* q的結果是p的地址值,**G的結果才是10。
7.如果調用函數傳遞的是地址,那麼被調函數中形參就需要使用指針接收,在函數中對指針所指變數值的改變,會影響到調用函數中的變數值。
8.一維數組名和指針的區別,有定義:int a[10],*p;
p=a;//合法,因為,一維數組名存的是數組首地址,這樣使 p指向了a首地址,也就是第一個元素的地址。
a++; / /不合法,因為a是一個地址常量,開辟了就不能再修改了,一切給數組名字賦值的操作都是非法的。
p++://合法,因為p是一個指針,p++表示從當前向後移動了一個位置。
對於上面的定義,a[i] 、* (ati)、* (p+i)、p[] 都是茄告合法,都是取下標為i的元素值。所以: p++; 是使指針向後移動,(*p) 十+是當前所指變數的值內容+1。
9.若有定義:int a[3][22],*p[3],iJ;*p[3] 中[優先順序[高於*,說明p是一個數組名,前面的*說明該數組中每個元素都用來存放指針,這叫指針數組。如果p和a產生聯系,則只能通過逐個伍納神賦值的方式完成,即: for(i=0;i<3;i++)p[] =a[; //合法,因為a[] 是二維數組中每行的首地址,所以可以存放到p數組中。
但是 p=a;是非法的,因為a是地址,p是數組的名字,並不是指針名下面獲取數組元素的方式都是合法的:*(p[i]+j)*(*(p+i)+j) (*(p+i))[j]。
10.若自定義函數的實參是一維數組名,則該函數的首部可以寫成: fun(int al) fun (int a[M]) fun(int*a) M表示長度,若有自定義函數的實參是二維數組名,則該函數的首部可以寫成: fun(int (*a)[N])。
fun(int al[N]) fun(int a[M][NJ) M表示行數,N表示列數,若有指針數組作為fun函數的實參,則該函數的首部可以寫成:fun(int *a[M]) fun(int *al) fun(int**a)。
❺ C語言指針指定地址
首先,不能這樣做,你c語言操作的地址並不是真實的地址,是操作系統從內存的某一段虛擬給你的地址,每次都不一樣,每個程序所使用的內存互不幹擾。
第二,而你的程序退出後,所擁有的空間就被系統全部回收了。也就不存在了。否則,你c語言亂改一通,要是改到系統正在用的內存,系統不就出現異常了嗎。內存並不是由你管理的,而是操作系統管理的。
假設 a程序的 p指針,指向 0xaaa地址 ,你修改 b程序的 p指針,指向0xaaa,也是無法修改的,每個程序的內存都是系統虛擬的。保證程序可以安全穩定的執行。
❻ C語言裡面的地址是什麼意思,指針指向一個變數的地址
C語言裡面的地址實際上就是一個內存單元的編號,計算機一般是以一個位元組為最小的存儲單元的,每個位元組就給它編一個編號,這個編號就是這個位元組的地址,這個編號也就是地址是具有唯一性的。指針指向一個變數的地址,這個類似於,通過知道房間號就可以確定這個房間的具體位置是一樣的道理,這個房間編號就是房間的地址。