c語言中取地址符和*有什么區(qū)別? c語言中取地址符和*有什么區(qū)別
不都是取地址。
1,符號含義不同:&是取地址運算符,&a為變量a的地址。
2,用法不同:聲明中 int x; x 是整型量。
語句中,&x 是整型量x的地址。不是指針,才有&。
語句中,x 是整型量x的值。
3,指向不同:*是指針運算符,*p為指針變量p所指向的存儲單元中的內(nèi)容。而指針變量p中一般只存放地址。* 表示指針,例如: int *p; -- p 是指針,指向整型量。
語句中,*p 表示指針指向的整型量的值。
語句中,p 表示指針指向的地址。
語句中,沒有 &p 形式,如果p是指針。
擴展資料
*空指針,*野指針
在函數(shù)內(nèi)部對指針進行賦值操作后,在函數(shù)執(zhí)行完畢后,該指針就成了一個空指針(變量從棧中彈出)。但是通過動態(tài)地址分配(堆空間)的指針不會有上述問題。
free(p)后釋放內(nèi)存的指針為野指針。
指針(pointer)是對數(shù)據(jù)對象或函數(shù)的一種引用。指針有多種用途,例如定義“傳址調(diào)用”函數(shù),它還可以實現(xiàn)動態(tài)數(shù)據(jù)結構,例如鏈表和樹。
通常,管理大量數(shù)據(jù)的有效方法不是直接處理數(shù)據(jù)本身,而是使用指向數(shù)據(jù)的指針。例如,如果需要對大量的大型記錄進行排序,對指向該記錄的指針列表進行排序效率要比直接對記錄排序高得多,因為這樣無需在內(nèi)存中移動數(shù)據(jù)。
類似地,如果需要把大型記錄傳入函數(shù),傳遞指向該記錄的指針會比直接傳遞記錄本身更經(jīng)濟,即使函數(shù)不需要修改該記錄。
指針代表了一個對象或函數(shù)的地址和類型。如果一個對象或函數(shù)具有 T 類型,那么指向它的指針就具有一個衍生出的指向 T 的指針類型(pointer to T)。
例如,如果 var 是一個 float 變量,那么表達式 &var(其值是該 float 變量的地址)屬于指向 float 的指針類型,按照 C 語言表達,就是 float* 類型。
指向任何 T 類型的指針也被簡稱為 T 指針(T point)。因此,&var 中地址運算符會生成一個 float 指針。
因為 var 沒有在內(nèi)存中移動位置,所以表達式 &var 是一個常量指針。然而,C 也允仵使用指針類型來定義變量。指針變量存儲的是另一個對象或函數(shù)的地址。
我們后面會進一步討論指向數(shù)組和函數(shù)的指針。首先,看看如何聲明指向非數(shù)組對象的指針,語法如下:
類型 * [類型限定符列表] 名稱 [= 初始化器];
在聲明中,星號(*)表示“指向的指針”。標識符“名稱”被聲明為一個對象,其對象類型為“類型”,也就是“指向‘類型’的指針”。類型限定符為可選擇項,可能包含 const、volatile 和 restrict 的任意組合。
參考資料
百度百科——指針
c語言中取地址符和*有兩點區(qū)別:
一、p指令:
聲明中: * 表示指針,例如: int *p,p是指針,指向整型量。*p表示指針指向的整型量的值。
語句中,p表示指針指向的地址。如果p是指針,沒有 &p 形式。
二、 x指令:
聲明中:x是整型量。&x是整型量x的地址,不是指針。
語句中:x是整型量x的值。&另一用途是按位運算符,按位* 是乘號。
擴展資料:
C語言中常見符號的作用:
1、 ? x:y,類似于if語句,例如: x>9?50:100; 意思是x是否大于9 ,是的話就輸出50,不是的話就輸出100。
2、c語言中,!的作用是邏輯非,例如:!a 凡是a不等于0,那么輸出都是0,只有當a等于0時,輸出的才是0。!=意思是不等于,一般應用與判斷 if(a!=b)。
3、c語言中,&&表示邏輯且(交集) ,||表示邏輯或(并集)。實際上兩者也是用來輸出正確與錯誤,也就是輸出0或1,判斷的意思。
區(qū)別如下:
(1)兩者根本意義不同。*是指針的意思,而&是去地址的意思,這兩個相輔相成。
(2)用法不同。高級的c語言都是動態(tài)開辟內(nèi)存,是使用malloc和free,這時就不用&了,因為取引用都是對于棧上的數(shù)據(jù),在數(shù)據(jù)結構中,都是在堆上開辟數(shù)據(jù)容量。
(3)語言規(guī)則不同,變量類型加*就是一個指向該變量類型的指針,通俗點說,指針就是可以通過地址修改和獲取該變量的值,而&符號只是獲取該變量的地址!
指針中的“取地址符”
擴展資料:
引用的聲明符放置在變量名的前面,和*操作符的用法一樣。
引用聲明完畢后,相當于目標變量名有兩個名稱,即該目標原名稱和引用名,且不能再把該引用名作為其他變量名的別名。 ra=1; 等價于 a=1;
聲明一個引用,不是新定義了一個變量,它只表示該引用名是目標變量名的一個別名,它本身不是一種數(shù)據(jù)類型,因此引用本身不占存儲單元,系統(tǒng)也不給引用分配存儲單元。
故:對引用求地址,就是對目標變量求地址。&ra與&a相等。
#include<iostream> using namespace std; int main()
{ int m[10]={1,2,3,4,5,6,7,8,9,10}; int (&n)[10]=m; for(int i=0;i<10;i++) cout<<m[i]<<' ' ;
cout<<endl; for( i=0;i<10;i++) cout<<n[i]<<' ' ; cout<<endl; return 0;}
例如:
int*pointer;//建立一個指針
int*&p1=pointer;/*
正確,編譯系統(tǒng)把"int*"看成一體,把"&p1"看成一體,即建立指針pointer的引用,就是給指針pointer起別名p1。
int&*p2=pointer;//錯誤,這就變成了引用的指針。
參考資料:&(C的位運算符)_百度百科
c語言中取地址符&和指針*的區(qū)別:
1、功能不同
&是一元運算符,取變量地址。
*作為標識符,定義變量為指針。
2、含義不同
&是一個引用,這個引用聲明時不開辟新空間,它在內(nèi)存分配表加入新的一行,該行內(nèi)存地址等于和調(diào)用時傳入的對應參數(shù)內(nèi)存地址。
*是一個無符號整數(shù),這個整數(shù)指向某個內(nèi)存地址,一次訪問sizeof(type)長度。
3、指向不同
&p指向變量a的地址。
*p為指針變量p所指向的存儲單元中的內(nèi)容。
4、用法不同
&聲明中 int x; x 是整型量,&x 是整型量x的地址。不是指針,才可以使用&。
*x 聲明時指示后面的變量是指針變量,且其基類型是前面的類型,使用時把地址轉(zhuǎn)向所指向的變量。
參考資料來源:百度百科——指針
百度百科——地址計算
兩者區(qū)別在于操作對象。
操作對象的不同:取地址運算符&,對任意變量都可以進行取地址操作;*是取指針目標運算符,其后跟隨的必須是指針類變量。
擴展資料:
指針變量可以進行加減運算,例如p++、p+i、p-=i。指針變量的加減運算并不是簡單的加上或減去一個整數(shù),而是跟指針指向的數(shù)據(jù)類型有關。
給指針變量賦值時,要將一份數(shù)據(jù)的地址賦給它,不能直接賦給一個整數(shù),例如int *p = 1000;是沒有意義的,使用過程中一般會導致程序崩潰。
使用指針變量之前一定要初始化,否則就不能確定指針指向哪里,如果它指向的內(nèi)存沒有使用權限,程序就崩潰了。對于暫時沒有指向的指針,建議賦值NULL。
兩個指針變量可以相減。如果兩個指針變量指向同一個數(shù)組中的某個元素,那么相減的結果就是兩個指針之間相差的元素個數(shù)。
數(shù)組也是有類型的,數(shù)組名的本意是表示一組類型相同的數(shù)據(jù)。在定義數(shù)組時,或者和 sizeof、& 運算符一起使用時數(shù)組名才表示整個數(shù)組,表達式中的數(shù)組名會被轉(zhuǎn)換為一個指向數(shù)組的指針。
參考資料:百度百科-指針:*和&
在c語言中,&和*有什么區(qū)別?
c語言中&&與&區(qū)別為:性質(zhì)不同、判斷依據(jù)不同、結果類型不同。一、性質(zhì)不同 1、&&:&&是邏輯操作符,表示為“邏輯與”。2、&:&是按位操作符,表示為“按位與”。二、判斷依據(jù)不同 1、&&:&&的判斷依據(jù)是x和y均為true,取值是true,否則取值是false。2、&:&的判斷依據(jù)是將x和y兩個數(shù)轉(zhuǎn)...
c語言指針和地址中 &a 和*a 有啥區(qū)別
&a是取地址 a是取a里面的內(nèi)容 補充:而*a是針對指針而言,也就是a必須是一個地址 而&是取地址符,a也可以是一個指針
在c語言中指針*q=&a和q=&a和*q=*a各自是什么意思
先說一下這幾個運算符的意思:*在定義變量的時候作用是聲明這是一個指針變量,再其它地方是用來尋址的;&是取地址運算符,可以獲取一個變量在內(nèi)存中的地址;然后說你提到的這三句話:q=&a 這句話應該是出現(xiàn)在定義變量q的時候,可以這樣寫:int a;int *q = &a;這里,*的作用是聲明q是一個...
C語言中&是什么意思?a&b怎么理解?
&在C語言中有兩種含義,一種是取地址符,是單目運算符,用于獲取變量的地址;另一種是位運算符,表示“按位與”,是雙目運算符,用于將兩個數(shù)進行按位與運算。當使用&變量名時,系統(tǒng)會取出該變量在內(nèi)存中的地址。而&a這樣的寫法表示的是變量a的地址,而非其值。另一方面,*a表示一個指向整型數(shù)據(jù)...
*p=&a,*p=a和p=&a各是什么意思,有什么區(qū)別?
1.一般來說*p=&a的表示方法是錯的,*p=a和p=&a是正確的。2.*p=a的意思:將a的值賦給p指針指向的地址的值;3.p=&a的意思是:將a的地址賦給指針p;4.區(qū)別:*p是一個值;p是一個地址;兩者完全不相同。5.*代表著p指向的地址的值,簡單來說就是取值;&是取地址符號,取的是地址;p是...
C語言 函數(shù)指針調(diào)用時加星號與不加星號都行是為什么?
定義,因為它是定義。不帶“*”,就無法區(qū)分是指針還是變量。&:叫做,取地址符。p1=&a;其實就是把a的地址取出來,賦給p1。你可以這么理解,*P1才是和變量a同一個等級的東西。&相當于降級取地址,那p1去掉星號*也相當于取地址。通俗來說*p本身就是為了地址操作而存在的,比如地址的交換,傳遞...
C語言中 取內(nèi)容與取地址運算符的問題
&是求地址運算符:就是將變量所在的內(nèi)存地址,提取出來 這兩個運算符的運算等級是相同的,也就是說誰距離變量近,就誰先。所以*&a和*(&a)是一樣的,都是先取地址,在對地址進行間接訪問。但是一定要注意*與&的順序,&*a是無效的。3,再說下題 運算符就是對地址進行操作的,那么 *地址 ...
c語言中& *的用法
區(qū)別:1.運算符性質(zhì)不同。&是一個位運算符。&&是一個邏輯運算符。2.作用不同。&是將兩個二進制的數(shù)逐位相與,結果是相與之后的結果。&&就是判斷兩個表達式的真假性,只有兩個表達式同時為真才為真,有一個為假則為假,具有短路性質(zhì)。3.用途限制。&除了是一個位運算符,也是取地址符。&&就是...
%c在C語言中表示什么
&: 在C語言中有兩種意思,一種是取地址符,是單目運算符;另一種是位運算符,表示“按位與”,是雙目運算符。C語言是一門面向過程的、抽象化的通用程序設計語言,廣泛應用于底層開發(fā)。C語言能以簡易的方式編譯、處理低級存儲器。
c語言中*p=a與*p=&a有什么區(qū)別
首先來說一下*和&,為了便于理解你可以認為,這里*是取內(nèi)容,&是取地址。我不討論它們的區(qū)別,因為*p=&a這個形式一般是錯的,常用的是p=&a。下面比較*p=a和p=&a。看圖,圖很詳細。顯然它們是等價的。然后比較*p=&a和p=&a;則這兩種都是對指針變量的賦值,賦值有兩種形式 ①先定義后賦值 int...
相關評說:
若爾蓋縣軸測: ______ &可以取變量的地址 *按地址取值 int a=3,*b; b=&a; /*a的地址給b*/ printf("%d",*b); /*顯示3,因為b里面是a的地址,按地址b取值,得3*/
若爾蓋縣軸測: ______ *是取值的意思,&是取地址的意思 第一個是:P是i地址指向的值 第二個是:p是i這個值的地址
若爾蓋縣軸測: ______ 編程中指針在使用以后,靈活多用,可以取別名來取地址 而地址操作符很繁瑣,每次必須使用引用的變量 就如同指路:指針相當于你用地圖來指 取地址符相當于你不能用路名,不能用門牌號碼,不能用參照物.
若爾蓋縣軸測: ______ j=*i;//說明j是普通變量,i是指針變量,意思是把i指向的變量中的值賦值給j j=&i//說明j是指針變量,i是普通變量,取i的地址然后賦值給j,這樣j就指向i了 j=*&i//你得先確定*和&的優(yōu)先級和結合性,*&i等價于*(&i),也就是先取i的地址,然后求這個地址所指向的內(nèi)容,其實就是i,所以這里,j和i都是普通變量,此等式的含義就是把i的值賦值給j
若爾蓋縣軸測: ______ 請問你是否說的是&符號``如果是的話下面就是這個符號在C語言中的作用!一、&是取地址符,這同*是相對應的,*是取地址中的內(nèi)容,而&是去該內(nèi)容的地址; 二、&是按位取與,1&1=1;1&0=0;0&0=0; 這與|是相對應的,|是按位取或:1|1=1;1|0=0;0|0=0; 例如15&16=0(將15 16分別轉(zhuǎn)換成二進制的,然后從高位到低位按位取與)15|16=31(同理); 注意不要和&& ||弄混了,&&是邏輯與,||是邏輯或;他們的左右都一定是bool型的數(shù)值或者表達式;結果也是一個bool型的
若爾蓋縣軸測: ______ & 是 取地址的運算符號 int *p; -- 這個 星號 只是聲明,表示 p 是指針. *p = 123; k = *p + 456; -- 語句里出現(xiàn) *p 這個形式,不同于聲明中的這個形式.(外貌一樣,意思不同)這個 *p 相當于 值,不是地址. 語句里出現(xiàn) p 才是地址.聲明為指針的p,沒有 &p 形式! int x; 聲明x是簡單變量.(當然不是指針) &x -- &是 計算地址,&x 是 x 的地址. (簡單變量才有 &x)
若爾蓋縣軸測: ______ &是一個運算符.& 運算符在C語言中有兩個意義:1、取地址算符;所謂取地址應該這么理解:每一個變量在內(nèi)存中都占用一定的空間,我們編程要對這個變量進行操作,就要通過它的空間邏輯地址來得到它、修改它.當然,關于地址理解遠不...
若爾蓋縣軸測: ______ *: 1.表示乘號 比如2*3=6 2./* */ 表示注釋 /*我是注釋*/ 3.*指針 表示這個指針所指向的內(nèi)容 比如p是一個地址,它指向的內(nèi)存地址保存著整型的3,那么*p就是3;同時也可以對它進行賦值,*p=4;之后這個內(nèi)存地址保存的就是4. 4.聲明char* 表示聲...
若爾蓋縣軸測: ______ int a[4];a就是數(shù)組的首地址,a+1就是a[1]的地址,a+3就是a[3]的地址
若爾蓋縣軸測: ______ &: 在C語言中有兩種意思,一種是2113取地址符,是單目運算5261符;另一種是位運算符4102,表示1653“按位與”,是雙目運算符.|: 是位運算符,表示“按位或”. 資料擴展 1、符號 & 和 | 這兩個運算符都是二進制的按位操作符. &:...