char *x[4] = { "ffg", "fgf", "kkk" "mmm"};
int *x1[4] = { 1, 2 ,3 , 4};
如果我创建了如上所述的å—符指针数组,那么它的编译很好,而如果我创建第二行ä¸æ到的整数指针数组,我就会收到错误
'initializing' : cannot convert from 'int' to 'int *'
è¯æ³•å¦‚何æ£å¸¸å¤„ç†å—符但ä¸é€‚用于整数。请解释任何人。
ç”案 0 :(得分:10)
"ffg"
的类型为char*
1 ,而1
的类型为int
(ä¸æ˜¯ {{1} }ï¼‰ã€‚å¸Œæœ›ä½ çŽ°åœ¨èƒ½çœ‹åˆ°è¿™ä¸ªé—®é¢˜ã€‚
1 :嗯,技术上it's char[4]
in C,但是这éšå«åœ°è¡°å˜ä¸ºint*
。在C ++ä¸ï¼Œç±»åž‹ä¸ºchar*
,您应该get a warning or an error from the compiler。
ç”案 1 :(得分:3)
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;
ç”案 2 :(得分:2)
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]
。
ç”案 3 :(得分:0)
指针数组没有错。 æˆ‘è®¤ä¸ºä½ æ— æ³•ç†è§£ç¼–è¯‘å™¨å‘Šè¯‰ä½ çš„å†…å®¹ã€‚
è¯æ³•æ²¡æœ‰é”™ã€‚è¯ä¹‰ä¸å¥½ã€‚
{1, 2, 3, 4}
类型为int[4]
,但您将其分é…ç»™int*[4]
,但这是ä¸å¯èƒ½çš„。
错误是initializing
错误。它告诉您解æžå™¨å¯ä»¥ä½¿ç”¨æ‚¨çš„代ç ,但è¯ä¹‰åˆ†æžå™¨ä¸æ˜¯å› 为int
与int*
ä¸åŒã€‚