關於各種字元陣列及指標的小研究

2021-07-16 07:28:39 字數 3798 閱讀 1073

# include # include # include # include # include # include # include # include //*

#define local

//*/

# define maxn 10000

# define maxint 2147483647

using namespace std;

/*ifstream fin("in.txt");

ofstream fout("out.txt");

//*/

int main()

; char* s1[2];

char* s2;

char** s3;

// s3=&s[0];[error] cannot convert 'char (*)[10]' to 'char**' in assignment

// s3=s;[error] cannot convert 'char [2][10]' to 'char**' in assignment

//s3[0]=s;[error] cannot convert 'char [2][10]' to 'char*' in assignment

// s1=s;[error] incompatible types in assignment of 'char [2][10]' to 'char* [2]'

//s1=s[0];[error] incompatible types in assignment of 'char [10]' to 'char* [2]'

//s1=&s;[error] incompatible types in assignment of 'char (*)[2][10]' to 'char* [2]'

//s1=&s[0];[error] incompatible types in assignment of 'char (*)[10]' to 'char* [2]'

printf("%s\n",s);//aaa

printf("%s\n",s[0]);//aaa

printf("%s\n",s1);//亂碼,可能是s1原本儲存的資料

//printf("%s\n",s3);編譯通過,執行出錯,可能是非法訪問了,見下面**

//printf("%s\n",s1[0]);編譯通過,執行出錯,可能是非法訪問了,見下面**

//printf("%s\n",s2);編譯通過,執行出錯,可能是非法訪問了,見下面**

printf("\n");

printf("%c\n",s);//0

printf("%c\n",*s);//0

printf("%c\n",**s);//a

printf("%c\n",s[0]);//0

printf("%c\n",s[0][0]);//a

printf("%c\n",s1);//是空的

printf("%c\n",s1[0]);//與 printf("%s\n",s1);結果相同

printf("%c\n",s2);//u

//printf("%c\n",s2[0]);編譯通過,執行出錯,可能是非法訪問了,見下面**

printf("%c\n",s3);//亂碼同上

//printf("%c\n",s3[0]);編譯通過,執行出錯,可能是非法訪問了,見下面**

printf("\n");

printf("%d\n",sizeof(s));//20

printf("%d\n",sizeof(s[0]));//10

printf("%d\n",sizeof(s[0][0]));//1

printf("%d\n",sizeof(s1));//16

printf("%d\n",sizeof(s1[0]));//8

printf("%d\n",sizeof(s2));// 8

printf("%d\n",sizeof(s2[0]));//1

printf("%d\n",sizeof(s3));//8

printf("%d\n",sizeof(s3[0]));//8

printf("%d\n",sizeof(s3[0][0]));//1

printf("\n");

printf("%p\n",&s); //00000000009ffe30

printf("%p\n",s); //00000000009ffe30

printf("%p\n",s[0]); //00000000009ffe30

printf("%p\n",&s[0]);//00000000009ffe30

printf("%p\n",&s1);//00000000009ffe20

printf("%p\n",s1);//00000000009ffe20

printf("%p\n",&s1[0]);//00000000009ffe20

printf("%p\n",s1[0]);//0000000000000001

printf("%p\n",&s2);//00000000009ffe18

printf("%p\n",s2);//000000000040ea05

printf("%p\n",&s2[0]);//000000000040ea05

printf("%p\n",s2[0]);//00000000ffffff83

printf("%p\n",&s3);//00000000009ffe10

printf("%p\n",s3);//ffffffffffffffff

printf("%p\n",&s3[0]);//ffffffffffffffff

//printf("%p\n",s3[0]);//0

//printf("%p\n",&s3[0][0]);//000000000040ea05

//printf("%p\n",s3[0][0]);//0

s1[0]=s[0];

s2=s[0];

//s3[0]=s[0];//程式崩潰

//s3[0]=s1[0];//程式崩潰

s3=s1;

printf("after s1[0]=s[0];\n");

printf("%p\n",&s1);//00000000009ffe20

printf("%p\n",s1);//00000000009ffe20

printf("%p\n",&s1[0]);//00000000009ffe20

printf("%p\n",s1[0]);//00000000009ffe30

printf("%p\n",&s2);//00000000009ffe18

printf("%p\n",s2);//00000000009ffe30

printf("%p\n",&s2[0]);//00000000009ffe30

printf("%p\n",s2[0]);//0000000000000061

printf("%p\n",&s3);//00000000009ffe10

printf("%p\n",s3);//00000000009ffe20

printf("%p\n",&s3[0]);//00000000009ffe20

printf("%p\n",s3[0]);//00000000009ffe30

printf("%p\n",&s3[0][0]);//00000000009ffe30

printf("%p\n",s3[0][0]);//0000000000000061

return 0;

}

總結明天寫吧。。。

關於字元陣列和字元指標

include void main 對於字元陣列a,其中的內容是可以改變的。可以再次對某個元素賦值 如 a 2 r 正確 a中存放首字元的位址,但不可被改變。a adeafsa 錯誤 對於字元指標變數p,它指向了乙個字串常量,而常量被儲存在常量區,是不可改變的 如 p r 錯誤 不過可以對指標變數p...

C 字元指標及字元陣列

1.在cout及多數c 表示式中,char陣列名,指向char型別的指標以及用引號括起的字串常量,都被解釋為字串第乙個字元的位址。char food 20 carrots 字元陣列初始化 cout物件認為char的位址為字串的位址,因此它列印位址處的字元,然後再列印後面的字元,直至遇到空字元 0 位...

關於指標 與 字元陣列

在我們寫 中使用到指標的字串時,經常會出現執行錯誤,大部分出現的錯誤是試圖去改變指標的字串的內容。指標的字串的內容是儲存在靜態資料區的,是不能夠改變的。需要使用字元陣列。例如改變 char p abcdef p 1 d 這是錯誤的不能改變裡面的內容,但是可以使用裡面的資料 char p abcdef...