簡體   English   中英

創建字符指針和整數指針的數組

[英]Creating array of character pointers and integer pointers

char *x[4] = { "ffg", "fgf", "kkk" "mmm"};
int *x1[4] = { 1, 2 ,3 , 4};

如果我如上所述創建字符指針數組,則可以很好地編譯,而如果如第二行所述創建整數指針數組,則將得到錯誤

'initializing' : cannot convert from 'int' to 'int *'

語法如何對字符有效,但對整數無效。 請向任何人解釋。

"ffg"類型為char* 1 ,而1類型為int不是 int* )。 希望您現在看到問題。

1 :嗯,從技術上講, 它是C中的char[4] ,但是隱式地衰減為char* 在C ++中,類型為const char[4] ,您應該從編譯器獲得警告或錯誤

int *x1[4] = { 1, 2 ,3 , 4}; 您不能執行此操作,而是存儲整數而不是整數指針,以將整數指針存儲在數組中,操作方法如下:

int *x1[4] ;
int i , j , k , l;
x1[0] = &i;
x1[1] = &j;
x1[2] = &k;
x1[3] = &l;

1, 2 ,3 , 4是整數,而不是指向ints指針。 您可能想要做。 像這樣進行投放:

int *x1[4] = { (int *)1, (int *)2 ,(int *)3 , (int *)4};

將使錯誤消失,但取消引用將導致UB。

int i1=0, i2=0, i3=0, i4=0;
int *x1[4] = { &i1, &i2, &i3, &i4 };

字符串文字(例如"ffg""fgf"等)保存在只讀位置(取決於實現),並且類型為char []

由於標記了C ++,因此可以嘗試:

#include <iostream>
#include <typeinfo>

int main()
{
    char arr [5] = "test";
    char *arr1 = "test";
    std::cout << typeid(arr).name() << std::endl;
    std::cout << typeid("test").name() << std::endl;
    std::cout << typeid(arr1).name() << std::endl;
}

輸出:

A5_c
A5_c
Pc

如您所見,字符串字面量會像NPE所說的那樣退化為指針,盡管其類型為char[5]

指針數組沒有錯。 我認為您無法理解編譯器在告訴您什么。

語法沒有錯。 這是不好的語義。

{1, 2, 3, 4}類型為int[4]但是您將其分配給int*[4] ,這是不可能的。

該錯誤是initializing錯誤。 它告訴您解析器可以處理您的代碼,但語義分析器並非出於intint*

暫無
暫無

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

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