當前位置:首頁 » 編程語言 » c語言取指針的值
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言取指針的值

發布時間: 2022-04-20 17:37:45

A. 在c語言中int **p,如果想取它的值,用*p來表達嗎

不是。
語句int **p;定義的p是二級指針,也就是,「指向指針的指針」,所以,用*p取出來的,仍然是一個地址。要想取出存放的用戶數據,必須要用**p,才可以。
另外,你題目中的敘述有點問題,就是那個「它」指的是誰,是p嗎?
現在分析一下:
當你用int **p;聲明一個變數時,系統會給變數p分配一個儲存空間,分配完後,可以用&p查看這個變數的位置。但是,它是一個空指針,不管用*p還是**p都只會得到亂碼,沒有實際作用。
但是你可以使用它,比如你有定義兩個變數:
int a=5,*b;
並且再給b和p賦值:
b=&a;
p=&b;
那麼,你就可以用:
p得到p的值(裡面存的b的地址)
*p得到b的值(裡面存的a的地址)
**p得到a的值(5)
所以,你確定是要p的值嗎?直接用p就可以。要想a的值,就要用**p了。
不知說明白沒有,如果有什麼問題請留言。

B. 關於c語言中指針操作字元串和指針取值的問題

問題一里,如果你想列印字元串,printf第二個參數應該是地址而不是地址里的內容,
如果你想列印一個字元,應該是%c而不是%s
應該寫為printf("%s\n",(buf+1)); 或者 printf("%c\n",*(buf+1)); (輸出是e)
問題二和一應該是同樣的錯誤
printf("%s\n",p);是列印整個字元串'test'
如果你只列印一個字元,比如s
printf("%c\n",*(p+2));

C. C語言如何把指針指向的值賦值到變數上。。。

str1是個常量指針,不能對他進行賦值操作, 用也應該寫成p=str1; 另外初始化的話一般是char* p=NULL; 或者char* p; p=NULL;

D. c語言中指針怎麼使用

1、使用場景

使用指針時,必須將它指向一個變數的地址或者為它分配空間方能使用,如下所示:

#include<stdio.h>

#include <stdlib.h>

int main(int argc, char const *argv[])

{

int a[5]={0,1,2,3,4};

int *b,*d;

int c=2;

int *e=a; //e指向a數組首地址

//*b=2; 無法直接初始化

//printf("%d ", *b);

e=e+2; //移動兩個地址單元

d=&c; //d指向c的地址來表示值

c=4; //修改原c變數的值,d指針的值會發生改變

b=(int *)malloc(sizeof(int));//為b分配一個int型空間來直接存儲

*b=2;//分配空間後可以直接賦值了

printf("this is e,b,c,d :%d %d %d %d ",*e,*b,c,*d);

2、類型說明

(1)int *a :表示一個指向int型變數的指針,指向的是變數的地址單元

(2)char *b:表示一個指向char變數的指針

*a表示的是這個指針指向地址的值,a為此指針本身的地址,這點要明確,一般用*(a+1)、*(a+2)來表示值,如:

int nums[5]={0,1,2,3,4};

int *a=nums;

printf("%d %d %p ",*a,*(a+1),a);

(4)c語言取指針的值擴展閱讀:

指針的運算

指針指向變數地址,若原變數的內容發生了變化,它本身也會發生變化,指針之間的運算一般為值運算和地址運算

(1)值運算:直接通過*運算方式,像a+*(a+1),結果為第一個元素與第二個元素相加。

int nums[5]={0,1,2,3,4};

int *a=nums;

(2)地址運算:通過a+i的方式.指針會指向a的下i個地址。

int nums[5]={0,1,2,3,4};

int *a=nums;

a=a+2;

printf("%d ",*a);

結果輸出2。

參考資料來源 :指針-網路

E. c語言中指針變數取值問題,c語言初學者,求指點

總共12個4位元組,每次加一代表移動一個4位元組,確實沒有錯.
你所有的數據總共是12個,移動4次後換行,也就說12個數字會分成3行列印,每行4個數字,
這個4次和一個int的4位元組沒有關系.

F. c語言 指針 取值

首先更正一下樓主錯誤,int 型的指針不可以用來獲取char型的地址的,這樣會產生錯誤,如果你的編譯系統沒有報錯,實際上也有錯誤。

第二,字元串實際上就是等於字元數組。
ptr = &str[2];
printf("%d",ptr);
reptr = *(ptr);
printf("%c",reptr);

printf("\n");
這個可以輸出的。就是C
ptr = &str[2];
printf("%c",*(ptr+1));
輸出的是第4個字元『/0』就是「空」,可能樓主由此判斷無法輸出
ptr = &str[1];
printf("%c",*(ptr+1));
就能輸出C了

int *應該不可以,不過 int的話就可以
char str[4] = "abc";
int ptr;
char reptr;

ptr =(int)&str[0];
printf("%d",(char *)ptr);
reptr = *((char *)ptr);
printf("%c",reptr);

printf("\n");

實際上利用強制類型轉換,用int來存數據,意義上char 和int都是整形,所以可以一定程度上轉換

G. 關於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。

H. C語言輸出指針的值.

把pAdd列印到字元串里。
盜用一些樓上代碼哈~
#include
<windows.h>
#include
<string.h>
void
main()
{
char
*pAdd;
char
str[20]
=
{0};
sprintf(str,
"%08x",
(long)
pAdd);
MessageBox(NULL,str,"My
程序",MB_OK);
}

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

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

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

這樣才可以:

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

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

(9)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;

J. C語言中的指針

先給你解釋一下指針變數和指針,還有指針變數指向的變數的分別意思。
指針變數的值是指針,指針就是地址;指針變數指向的變數就不是地址了,而是一個具體的變數。
看一個很簡單的程序段:
main()
{
int
a=5,*p=&a;
printf("%d",*p);}
在這里,定義了指針變數p,指針變數p又被賦予了a的地址,此時a的地址就是指針變數p的值;而*p就是指針變數指向的變數,此處是整型變數,由於p被賦予的是a的地址,所以說這個變數就是a,即*p=a.接著因為a被賦予了5,也就是*p就是為5.
這樣你就可以理解*n=0是什麼意思了,也就是n是一個指針變數,這個指針變數指向的變數是一個整型變數,*n就是一個整型變數,*n這個整型變數被賦值為0;
然後是你的第二個問題:*n++,因為*和++是同優先順序,並且是自右向左運算(你查下書的附錄可知),所以說,相當於*(n++),意思是取了*n這個值之後,再n++,即往下一個地址去,然後接著取這個地址的值;再n++....一直往下取。
而(*n)++呢,就是先取了*n這個值之後,然後再把*n這個值自增1.
如果不明白,建議多看幾遍書哦!