创建字符指针和整数指针数组

时间:2013-10-23 13:44:35

标签: c++ c

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

如果我创建了如上所述的字符指针数组,那么它的编译很好,而如果我创建第二行中æ到的整数指针数组,我就会收到错误

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

语法如何正常处ç†å­—符但ä¸é€‚用于整数。请解释任何人。

4 个答案:

答案 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*ä¸åŒã€‚