簡體   English   中英

int * a和char * a之間的區別?

[英]Difference between int*a and char *a?

char *aint *a之間有什么區別,因為兩者都在用於存儲字符指針的代碼塊上工作,例如。

char *c, k = '$';
int *j;

j = &k;
printf("%c\n%p\n%c\n", k, j, *j);

c = &k;
printf("%c\n%p\n%c", k, c, *c);

激活診斷程序,不要忽略它們( -Wall -Wextra -pedantic-errors )。
編譯器應告訴您您正在執行不允許的操作。

參見此處關於coliru的信息: http ://coliru.stacked-crooked.com/a/31acb5b670254167

main.cpp:7:7: error: incompatible pointer types assigning to 'int *' from 'char *' [-Werror,-Wincompatible-pointer-types]
    j = &k;
      ^ ~~

回答您的問題時, char是一個比int低的整數類型(它可能(實際上在實際上可以保證)更小的大小和值范圍),並且它的指針也是不同的類型。
UB使用錯誤類型的指針訪問對象(少數例外)。

將字符對象解釋為整數

printf("%c\n%p\n%c\n", k, j, *j);

或將char的地址存儲到int指針中

j = &k;

是不確定的行為。

在您的情況下,您偶然會得到相同的結果。 代碼不正確,可能還會打印任何內容。

char *a

a是指向某物的指針。 那是一個char

int *b

b是指向某物的指針。 那是一個int

ab都是指針 ,它們僅存儲指向其他對象的內存地址,這就是為什么有可能(但絕對不建議;默認情況下warning-wError error )將int的地址存儲在char *
取消引用是未定義的行為,並且“ 可能發生任何事情 ”,這就是為什么警告/錯誤首先出現的原因。

可能適用於您當前的機器和編譯器。 雖然不能保證,但實際上任何事情都會破壞它。 不要做

在您的情況下,它將給出相同的值,因為sizeof(int)>size(char) 如果您真的想看看char*int*之間的區別。 我們開工吧:

假設: char1 byteint4 byte ,地址也為4 byte 觀察char*int*之間的區別。

int k=1024;
char* charptr= &k;
int* intptr=&k;

printf("%02x \n\n", *charptr); // this will simply print `00`
printf("%02x \n\n", *intptr); // this will simply print `400`
int i=0;
for(; i<4 ; i++)
  printf("%02x ", *charptr++);  // this will print `00 04 00 00`

注意:這是一個小端的機器。 第一次打印僅顯示第一個字節的內容,因此我們將00作為輸出。 第三個打印語句清除所有內容。

希望這將有助於理解此處的區別。

char指針和int指針有什么區別?

不用考慮代碼是什么,答案很簡單Char指針指向一個存儲有char值的內存地址,而int指針指向一個具有int值的地址。 這是並且仍然是它們之間的區別。 但是,當您強制編譯器執行未指定的操作時,您會得到錯誤或未指定的行為。

那么,您的代碼怎么了?

答案中已經對此進行了很好的解釋,但是最基本的是char是作為ascii值存儲的,因此在您的情況下,int指針可以指向char。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM