當前位置:首頁 » 編程語言 » c語言指針的賦值

c語言指針的賦值

發布時間: 2022-04-18 08:17:55

⑴ 在c語言中能否直接給指針指向的數據賦值為什麼

可以,但int *p;*p=7;這樣不行。

因為「能直接給指針指向的數據」賦值,而這里的p還沒有指向,所以不能賦值,這種指針有個名字叫「懸浮指針」,是不能給它賦值的。

這樣才可以:

int a,*p=&a;*p=7;

實際上就是使a等於了7。

(1)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語言 指針如何賦值

指針的賦值
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語言如何給結構體指針賦值

結構體數組指針作為函數參數,通過數組的首地址與偏移量對結構體數組進行scanf的賦值,在函數中通過指針間接訪問到其指向的內存。

舉例:編寫函數,輸入5個學號(int),5個姓名(字元串),5個成績數組(每組三個成績)(int[3]),依次調用函數

#include <stdio.h>

#include <stdlib.h>

struct student //建立結構體,學號,姓名,3門課的分數

{

int num;

char name[10];

int score[3];

}Stu[5]; //初始化,一共5個學生的數據

void getScore(struct student * p) //函數:向結構體讀取分數,一共三門課

{

int i, j;

for (i = 0; i < 5; i++)

for (j = 0; j < 3; j++)

scanf_s("%d", (&(p+i)->score[j]));

}

void getNum(struct student * p) //函數:向結構體讀取學號

{

int i;

for (i = 0; i < 5;i++)

scanf_s("%d", &(p + i)->num);

}

void getName(struct student * p) //函數:向結構體讀取姓名

{

int i;

for (i = 0; i < 5; i++)

scanf("%s", &(p + i)->name);

}

int main()

{

int i, j, average[3] = { 0 }; //average數組儲存每門課的平均分

getNum(Stu); //函數調用

getName(Stu);

getScore(Stu);

for (j = 0; j < 3; j++)

{

for (i = 0; i < 5; i++)

average[j] += Stu[i].score[j];

}

for (i = 0; i < 5; i++)

{

printf("num = %d name = %s Score:", Stu[i].num, Stu[i].name); //依次列印學號 姓名

//printf("%d %d %d", Stu[0].score[0],Stu[0].score[1],Stu[0].score[2]);

for (j = 0; j < 3; j++) //列印三門課的分數

printf(" %d", Stu[i].score[j]);

printf(" ");

}

printf("average:");

for (i = 0; i < 3; i++)

printf("%f ", (float)average[i]/5); //列印三門課平均分

printf(" ");

system("pause");

return 0;

}

如:

scanf("%c%c%c",&a,&b,&c);

輸入為:

d e f

則把'd'賦予a, ' '(空格)賦予b,'e'賦予c。因為%c 只要求讀入一個字元,後面不需要用空格作為兩個字元的間隔,因此把' '作為下一個字元送給b。

只有當輸入為:def(字元間無空格) 時,才能把'd'賦於a,'e'賦予b,'f'賦予c。

⑷ c語言指針賦值問題

請分清「指針本身的值」和「指針指向的地址中的值」這兩者的區別。指針本身的值就是地址。

inta=2;
int*p=&a;
//p=100;//試圖將指針本身的值修改為100,即令指針p指向內存地址100的位置,這是未定義行為
*p=100;//將指針p指向的地址中的值修改為100,即將a的值修改為100

⑸ 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 );
}

⑹ C語言程序設計 指針變數賦值

C語言 形式邏輯不成立(C語言的缺點!)。

int a[ 10] ,*p=a; 是聲明,聲明中 *p=a 表示p是指針,初始化把a數組的首地址賦給它。

*p=a;是語句,不是聲明,形式一樣,就不行了!
因為 語句 里,*p 表示p 指向的 值。

同樣的形式,意思不同,形式邏輯不成立,(C語言的缺點!)。
初學者,人人遇到這個問題!

⑺ 關於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語言指針賦值

類型不匹配,這個時候a相當於指針的指針,這樣寫當然不正確了,你要是想取這個地址,可以寫成

p = *(a+1);

⑼ C語言指針怎麼賦值呢

要改p–>a的值,和在這個函數裡面是一樣的
直接
p–>a=要賦值的值
這樣就可以了
唯一需要注意的就是要賦值的是結構體指針還是結構體變數,如果不是指針那就要改成點了
p.a這樣

⑽ C語言程序設計指針變數賦值

int
*p;中的「*」說明定義的一個變數p是指針類型的。

*p中的「*」是一種操作,是取值操作。即去指針指向的那個值。
*p可看作是一個整形的變數。a則可以看成是一個指針。

熱點內容
微信青少年模式獨立密碼是什麼 發布:2025-01-22 16:52:06 瀏覽:587
騰訊雲伺服器怎麼購買 發布:2025-01-22 16:45:01 瀏覽:628
天貓怎麼上傳視頻 發布:2025-01-22 16:40:02 瀏覽:725
安卓如何把抖音評論換成黑色 發布:2025-01-22 16:30:57 瀏覽:700
連接池Java 發布:2025-01-22 16:28:27 瀏覽:258
搶杠演算法 發布:2025-01-22 16:15:02 瀏覽:72
圖片伺服器ftp 發布:2025-01-22 15:52:33 瀏覽:507
sql打開bak文件 發布:2025-01-22 15:47:32 瀏覽:107
opengl伺服器源碼 發布:2025-01-22 15:40:02 瀏覽:909
python部署服務 發布:2025-01-22 15:38:46 瀏覽:283