1. c語言指針賦值問題
請分清「指針本此信辯身的值」和「指針指向的地址中的值」這兩者的區別。指針本身的值就是地森缺址。
inta=2;
int*p=&a;
//p=100;//試圖將指針本身的值修改為100,即令指針p指向內存地址100的位置坦碰,這是未定義行為
*p=100;//將指針p指向的地址中的值修改為100,即將a的值修改為100
2. C語言中可以給指針變數賦值常數嗎
C語言中可以給指針變數賦值常數,賦值方法為:
1、首先打開Microsoft Visual C++軟體,單擊「文件」菜單->「新建」,新建一個文件,文件名後綴為.c。
3. C語言指針的賦值問題
指針在用要注意初始化,例如:
int *p;
p為指針,地址是未知的,如果直接賦值
*p=a;這樣編譯可以通過,但是會產生警告,p的地址是隨機分配的,這樣對未知的地址賦值很危險,可能會覆蓋掉某些重要數據,所以避免這種危險,在定義指針時注意初始化,也就是賦值。
可以int *p=&a;
或者int *p;
p=&a;
然後再對p進行操作
有錯。
注意大小寫,還有
int a=9;
int *p;
p=&a;//這個是指針指向a
*p=8;
這樣就對了。
(3)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
備註:字元串與指針的初始化和賦值
初始化:
char *cp = "abcdefg"; //這個初始化過程,是將指針cp指向字元串的首地址,而並非傳遞字元串的值。由於,在C語言裡面,沒有總體處理一個字元串的機制
賦值:
cp = "abcdefg";
*cp=」abcdefg」 ;//錯誤!字元串常量傳遞的是它的首地址,不能夠通過*cp改動該字元串的值,由於該字元串為常量,而它僅僅是簡單的將指針指向該字元串常量。
4. c語言 指針賦值
空定義了一個指針temp,但是temp沒有指向任何變數,所以不能對它所指向的地址賦值(*temp=*p1是在對temp指向的地址賦值,既然它沒有指向任何已知派和迅塵此的地址,當然結果是不棚兄可預見了).
這個函數也不需要這樣的指針,修改如下即可:
swap(int *p1,int *p2)
{int temp;
temp=*p1;
*p1=*p2;
*p2=temp;
}
5. c語言結構體函數指針怎麼賦值
指針就是指向內存的某個地址的一個變數。
結構體指針就是這個指針變數的值必須指向存放該結構體的內存位置。
當這個指針沒有任何指向時,可以賦值為null值,但是改指針不可使用,程序中應該做判斷。下面是一些賦值演示。
struct student{
int id;
int score;
} aaa;
struct student *p = null;//結構體指針p初始化賦值為null
struct student *p2=&aaa;//p2指向aaa
struct student *p3=(struct student *)malloc(sizeof(struct student));//內存中申請一個結構體空間,並將地址強制轉換為結構體指針變數賦值給p3
6. C語言指針變數賦值0是什麼意思
其實這種現象在C語言中是有定義的。
值為0的整形常數表達式或強制轉換為void *類型的表達式可通過強制類型轉換、賦值或比較操作轉換為任意類型的指針。其結果將產生一個空指針。
7. 在C語言中能否直接給指針指向的數據賦值為什麼
可以,但int *p;*p=7;這樣不行。
因為「能直接給指針指向的數據」賦值,而這里的p還沒有指向,所以不能賦值,這種指針有個名字叫「懸浮指針」,是不能給它賦值的。
這樣才可以:
int a,*p=&a;*p=7;
實際上就是使a等於了7。
(7)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;
8. C語言如何把指針指向的值賦值到變數上。。。
str1是個常量指針,不能對他進行賦值操作,
用也應該寫成p=str1;
另外初始化的話一般是char*
p=NULL;
或者char*
p;
p=NULL;
9. c語言 結構體成員變數為指針時如何賦值
1、既然是指針變數,那麼將一個變數的地址值賦值給該指針變數即可!
2、至於具體講一個地址值賦值給指針有兩種方法:一種就是用取地址符&來操作內嵌變數,另一種就是通過採用malloc函數動態開辟內存並將內存地址值賦值給指針變數。
3、舉例說明:定義int型指針變數int
*
p;和int型變數int
a;那麼將a的地址值賦值給p:p=&a;另一種方式是動態方式:p
=
(int*)malloc(size(int));
10. C語言指針變數的賦值和做函數的參數
1、指針變數的賦值,分為定義時賦值(初始化)和單獨賦值,如:
int x ;
int * px=&x ; //定義時賦值,也稱初始化,注意這里的*是跟隨int的,即變數px是int *類型變數! 實際上的賦值語句是px=&x ;
int * py ;
py=&x ; //單獨賦值,將py指向x
*py=10 ; //這里的*,是引用指針中的數據操作符,*跟隨的變數必須是指針類型變數,否則會出錯! *py就是x,這里相當於x=10;
2、指針變數作為函數的參數時,子函數可以通過指針引用實參地址中的數據,達到修改實參地址中的數據。如:
#include <stdio.h>
void func( int a, int b, int *pmax )
{
if ( a>b ) *pmax=a;
else *pmax=b ;
}
void main()
{
int a=2,b=3,max=0;
func(a,b,&max ); //這里將變數max的地址傳遞到子函數,子函數中通過該地址,可以修改max的值,達到子函數結束後,max能帶回運算結果的效果。
printf("max=%d\n", max );
}