c語言指針的賦值
㈠ c語言程序設計指針變數賦值
C語言 形式邏輯不成立(C語言的缺點!)。
int a[ 10] ,*p=a; 是聲明,聲明中 *p=a 表示p是指針,初始化把專a數組的首地址賦給它。
*p=a;是屬語句,不是聲明,形式一樣,就不行了!
因為 語句 里,*p 表示p 指向的 值。
同樣的形式,意思不同,形式邏輯不成立,(C語言的缺點!)。
初學者,人人遇到這個問題!
㈡ c語言 指針如何賦值
指針的賦值
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
㈢ c語言中能把指針變數賦值給指針變數嘛
指針時用來存放地址的!地址就是個常數啊!所以這樣是能編譯通過的!內
但是,這樣容執行會出錯(段錯誤)的!因為指針本來是存放地址的,而你卻存放了一個常數(即一個不合法的地址),這樣就會使指針指向不確定的內存單元(非法訪問),從而出現錯誤!
㈣ C語言指針怎麼賦值呢
要改p–>a的值,和在這個函數裡面是一樣的
直接
p–>a=要賦值的值
這樣就可以了
唯一需要注意的就是要賦值的是結構體指針還是結構體變數,如果不是指針那就要改成點了
p.a這樣
㈤ C語言中可以給指針變數賦值常數嗎
C語言中可以給指針變數賦值常數。
如:
char *p,a='5';
p=&a;
p="abcd";
解析:
P申請了空間(在常量區),存放了字元串,所以最後可以返回地址。
以字元串形式出現的,編譯器都會為該字元串自動添加一個0作為結束符,如在代碼中寫
"abcd",那麼編譯器幫你存儲的是"abcd "。
(5)c語言指針的賦值擴展閱讀
1、定義指針變數的一般形式如下:
類型名*指針變數名1,*指針變數名2,... *指針變數名n ;
2、空指針
空指針是一個特殊的指針,它的值是0,C語言中用符號常量NULL(在stdio.h中定義)表示這個空值,並保證這個值不會是任何變數的地址。空指針對任何指針類型賦值都是合法的。一個指針變數具有空指針值表示當前它沒有指向任何有意義的東西。
3、void指針
(void *)類型的指針叫通用指針,可以指向任何的變數,C語言允許直接把任何變數的地址作為指針賦給通用指針。
但是需要注意void*不能指向由const修飾的變數,例如const int test; void * ptv; ptv = &test;第三句是非法的,只有將ptv聲明為const void * ptv;,上述第三句ptv = &test才是合法的。
當需要使用通用指針所指的數據參加運算時,需要寫出類型強制轉換。如通用指針ptv 所指空間的數據是整型數據,p是整型指針,用此式轉換:p=(int *)ptv;
㈥ 關於c語言指針變數的賦值
p=&a;
//p指向a
q=&b;
//q指向b
w=q;
//w與q相同,指向b
q=NULL;
//q置空
*p=*w;
//把w指向的對象的值賦給p指向的對象的值,就是把b賦給a
結果就是a=3
㈦ 關於C語言中指針賦值的問題
你這樣想說明復你還沒有真正理解內制存和指針。int
a;表示編譯器隨機取出一個空閑的地址分配給a,不妨設為00000000,長度為sizeof(int),不同編譯器可能不同。int
*p;也表示隨機取出一個空閑的地址分配給p,不妨設為000000f0,長度一般為4個位元組,則這四個位元組現在存儲的內容是不確定的,假設為00000ff0,那麼*p表示地址00000ff0上的值。*p=a則把地址00000ff0的值變為a的值,顯然如果該地址目前正在被某個進程使用,就有可能破壞該進程,因此這種方法是十分危險的。給指針賦值一般有兩種方法,一種是將已經存在的變數的地址傳遞給指針,格式為:p=&a;另一種是首先為指針申請指向的合法內存,C語言中用函數malloc(),然後給已申請的地址賦值,如*p=6。
㈧ 在C語言中能否直接給指針指向的數據賦值為什麼
可以,但int *p;*p=7;這樣不行。
因為「能直接給指針指向的數據」賦值,而這里的p還沒有指向,所以不專能賦值,這種指針屬有個名字叫「懸浮指針」,是不能給它賦值的。
這樣才可以:
int a,*p=&a;*p=7;
實際上就是使a等於了7。
(8)c語言指針的賦值擴展閱讀:
注意事項
也可以使用賦值運算符為指針變數賦值,但要保證兩個指針變數的類型相同。
假設有如下變數定義:
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;
㈨ C語言指針賦值
指針還有基類型
a的指針基類型是char (*)[5],顯然和指針p的char *是不同的,
如,此處的a+1和(char *)a+1值是不同的
㈩ 請問C語言這個指針要怎麼賦值
你是抄要找一個字元還是襲找字元串的?根據你列印的程序來看應該是找一個字元。那麼find_char中就可以寫成:
char
*p_return;
int
i;
for(i=0;
source[i]!=NULL;
i++)
{
if(source[i]
==
*chars)
{
break;
}
}
p_return
=
source+i;
return
p_return;