c語言指針賦值指針
① c語言中能把指針變數賦值給指針變數嘛
指針變數賦值給指針變數
是可以的。
我想補充樓上的
1、就是這兩個指針變數同時指向一個地方
內存
2、指向指針的指針的指針是二級指針。它指向指針。
到看你怎麼用了
② 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語言程序設計 指針變數賦值
C語言 形式邏輯不成立(C語言的缺點!)。
int a[ 10] ,*p=a; 是聲明,聲明中 *p=a 表示p是指針,初始化把a數組的首地址賦給它。
*p=a;是語句,不是聲明,形式一樣,就不行了!
因為 語句 里,*p 表示p 指向的 值。
同樣的形式,意思不同,形式邏輯不成立,(C語言的缺點!)。
初學者,人人遇到這個問題!
⑤ C語言指針賦值
類型不匹配,這個時候a相當於指針的指針,這樣寫當然不正確了,你要是想取這個地址,可以寫成
p = *(a+1);
⑥ 在C語言中能否直接給指針指向的數據賦值為什麼
可以,但int *p;*p=7;這樣不行。
因為「能直接給指針指向的數據」賦值,而這里的p還沒有指向,所以不能賦值,這種指針有個名字叫「懸浮指針」,是不能給它賦值的。
這樣才可以:
int a,*p=&a;*p=7;
實際上就是使a等於了7。
(6)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
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是指針類型的。
而
*p中的「*」是一種操作,是取值操作。即去指針指向的那個值。
*p可看作是一個整形的變數。a則可以看成是一個指針。
⑨ 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;
這樣就對了。
(9)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改動該字元串的值,由於該字元串為常量,而它僅僅是簡單的將指針指向該字元串常量。
⑩ C語言指針怎麼賦值呢
要改p–>a的值,和在這個函數裡面是一樣的
直接
p–>a=要賦值的值
這樣就可以了
唯一需要注意的就是要賦值的是結構體指針還是結構體變數,如果不是指針那就要改成點了
p.a這樣