1樓:計算天下
你這樣想說明你還沒有真正理解記憶體和指標。int a;表示編譯器隨機取出一個空閒的地址分配給a,不妨設為00000000,長度為sizeof(int),不同編譯器可能不同。int *p;也表示隨機取出一個空閒的地址分配給p,不妨設為000000f0,長度一般為4個位元組,則這四個位元組現在儲存的內容是不確定的,假設為00000ff0,那麼*p表示地址00000ff0上的值。
*p=a則把地址00000ff0的值變為a的值,顯然如果該地址目前正在被某個程序使用,就有可能破壞該程序,因此這種方法是十分危險的。給指標賦值一般有兩種方法,一種是將已經存在的變數的地址傳遞給指標,格式為:p=&a;另一種是首先為指標申請指向的合法記憶體,c語言中用函式malloc(),然後給已申請的地址賦值,如*p=6。
2樓:
指標是指向記憶體地址,*p 也就是 指標p 指向了a 也就是擁有了 a的功能和變數值
如果a是一個類 那麼他可以呼叫a 的類中成員函式或者變數 具體需要**實現
指標與指標之間相互賦值
比如 指標 pt 和 pr 他們分別指向不同的地址 一個是 a 一個是 b 如果a 和 b 分別是 1 和 2 那麼 pt=pr 也就是 pt指向了 pr中的指標,而這樣如果在實際使用中不當 可能會造成崩潰 這個是一個概念 一般不這樣使用。因為很危險 具體 多接觸下 指標就應該知道了。主要還是看應用到什麼環境裡面
3樓:
*p=a等同於p=&a,都是把a的地址給p,或者說把p指向a
你對*p=a的理解有誤,在指標定義時,用int *p;
在程式中,p表示指標變數,而*p表示指標p所指向的變數的值
c語言指標的賦值問題
4樓:大野瘦子
指標在用要注意初始化,例如:
int *p;
p為指標,地址是未知的,如果直接賦值
*p=a;這樣編譯可以通過,但是會產生警告,p的地址是隨機分配的,這樣對未知的地址賦值很危險,可能會覆蓋掉某些重要資料,所以避免這種危險,在定義指標時注意初始化,也就是賦值。
可以int *p=&a;
或者int *p;
p=&a;
然後再對p進行操作
有錯。注意大小寫,還有
int a=9;
int *p;
p=&a;//這個是指標指向a
*p=8;
這樣就對了。
指標的賦值
int *p;
int a;
int b[1];
p = &a;
p = b;
指標的賦值,“=”的左運算元能夠是*p,也能夠是p。
當“=”的左運算元是*p時,改變的是p所指向的地址存放的資料;
當“=”的左運算元是p時,改變的是p所指向的地址。
陣列的變數名b表示該陣列的首地址,因此p=b;也是正確的
同型別的指標賦值:
int val1 = 18,val2 = 19;
int *p1,*p2;
p1 = &val1;
p2 = &val2;
p1 = p2; //注意啦,p1指向了val2,而沒有指向val1
備註:字串與指標的初始化和賦值
初始化:
char *cp = "abcdefg"; //這個初始化過程,是將指標cp指向字串的首地址,而並非傳遞字串的值。由於,在c語言裡面,沒有總體處理一個字串的機制
賦值:cp = "abcdefg";
*cp=”abcdefg” ;//錯誤!字串常量傳遞的是它的首地址,不能夠通過*cp改動該字串的值,由於該字串為常量,而它僅僅是簡單的將指標指向該字串常量。
5樓:林聲飄揚
有錯注意:用指標變數前,必須對指標變數賦值如:int i, *p1;
p1=&i;
再如:int a, b;
int *p1, *p2;
*p1=10; *p2=100;
但指標變數未賦值,即指標指向未知地址,這樣是錯誤的因此:絕對不能對未賦值的指標變數作“指向”運算。
int a=9,b;
int *p=&b;//必須加上這一句
*p=a;
*p=8;
這樣就不會產生錯誤
6樓:匿名使用者
注意大小寫!還有
int a=9;
int *p;
p=&a;//這個是指標指向a
*p=8;
這樣就對了。
7樓:七先生是遊戲鬼才
這個還是比較複雜的,你可以學習一下
8樓:匿名使用者
p=&a//把a的地址給指標p
9樓:匿名使用者
語法上沒錯,但可能出現警告,破壞程式其他資料
10樓:渾濃強浩然
p就是一個指標,他指向一個地址,而&p就是p剛才所指向的具體地址,*p是p指向地址裡面的東西。也就是值。*p=&a的意思是把a的地址給了*p,這樣的話p就指向
(指向a的地址)的地址。對指標賦值必須是int*p=null;或者int
*p;p=null。
在c語言中能否直接給指標指向的資料賦值?為什麼?
11樓:大野瘦子
可以,但int *p;*p=7;這樣不行。
因為“能直接給指標指向的資料”賦值,而這裡的p還沒有指向,所以不能賦值,這種指標有個名字叫“懸浮指標”,是不能給它賦值的。
這樣才可以:
int a,*p=&a;*p=7;
實際上就是使a等於了7。
注意事項
也可以使用賦值運算子為指標變數賦值,但要保證兩個指標變數的型別相同。
假設有如下變數定義:
int i,j,*p,*q;p=&i;q=&j;
這兩句將變數i和j的地址分別賦值給指標變數p和q;
執行了q=p後,執行該條語句,指標變數p和q都指向了同一個變數i,因此指標變數p和q中存放的都是變數i的地址&i。變數i此時並沒有初始化,只為其分配了記憶體單元。
注意理解:q=p;和*q=*p
前者為指標變數q賦值,即將指標變數p中存放的某個變數的地址賦值給q。顯然,賦值後,q和p就指向了同一個變數。
後者將p指向變數的賦值給q指向的變數。
例子:p=&i;
q=&j;
i=2;
j=3;
12樓:匿名使用者
可以直接給指標指向的資料賦值。
因為*p操作是這樣一種運算,返回p的值作為地址的那個空間的取值。存放地址的變數稱為指標變數。指標變數是一種特殊的變數,它不同於一般的變數,一般變數存放的是資料本身,而指標變數存放的是資料的地址。
在使用一個指標時,一個程式既可以直接使用這個指標所儲存的記憶體地址,又可以使用這個地址裡儲存的函式的值。
13樓:
能,一定能。但你int *p;*p=7;這樣不行。為什麼呢?
因為“能直接給指標指向的資料”賦值,而你這裡的p還沒有指向,所以不能賦值;這種指標有個名字叫“懸浮指標”,俗稱野指標,是不能給它賦值的。這樣才可以:int a,*p=&a;*p=7;,實際上就是使a等於了7。
14樓:在臨潮湖吃中餐的淺藍暹石
不行,因為你只是宣告瞭一個int型的指標,代表執行某一塊記憶體,可是並沒有說明到底是那一塊記憶體, 所以後面的賦值也是沒有意義的,7只是個存放在靜態儲存區的字面值,是不能這麼賦值的。
15樓:匿名使用者
只有字元指標可以,他會自動生成記憶體來儲存
16樓:匿名使用者
指標要指向一個合法的地址才可以賦值
17樓:超級旅行者
*p沒有指向記憶體,要先申請記憶體,可以這樣
#include
int *p = (int *)malloc(sizeof(int));
*p = 7;
printf("%d",*p);
關於C語言指標自增運算的問題,c語言中指標可不可以用在自增自減運算子中
搗蒜大師 這寫操作等價 p p 都是p加,然後 這些操作等價 p p p 相當於先 了,然後p再 include main p 指向2 printf d n p 2 p p 1 p指向3 printf d n p p指向4,再 4 p p 1 p指向5 printf d n p 5,p指向6 p p...
怎麼理解C語言指標中a b,c語言中,指標問題! a b和a b,有什麼不同?a是指標
豬頭或火寶寶 你好!首先我們已經知道 a,b,都是指標變數,a表示指標變數所指向的值,同樣 b也是如此。a b就是表示把指標b所指向的值賦值給指標變數a所指向的值。但是要是指標a要是沒有初始化或是開闢空間的話,這樣賦值就有危險!例如 int a int b 5 a b 首先宣告一個指標變數a,但是系...
c語言的賦值問題,C語言指標的賦值問題
上面的說法中,都存在錯誤或不足.1.首先 c a b 的意義是把 a 和 b 這兩個變數的內容 5 和 6 相加得 11,再把 11 這個結果值傳送至 變數 c 所在的儲存單元儲存起來 而不是你想像的 將 a 和 b 這兩個變數組合為一個變數作為 c,或者複製一份變數組合再作為 c.當你用int a...