Chuyển đổi sau có an toàn không?Chuyển đổi không an toàn
int b[10][10];
char *x;
int a[]={0,1,2,3,4,5,6,7,8,9};
for(int i=0;i<10;i++)
for(int j=0;j<10;j++)
b[i][j]=a[i];
for(x=(char *)&b[0];x<=(char *)&b[9][9];x+=sizeof(a+1)) // Problem lies here!
printf("%d\n",*x);
Tôi không nghĩ chuyển đổi ở trên trong vòng lặp for
là an toàn (tôi nghĩ nó phụ thuộc vào nền tảng). Hãy sửa tôi nếu tôi sai. Tôi ngạc nhiên vì mã biên dịch mà không đưa ra bất kỳ cảnh báo nào ngay cả khi được biên dịch bằng cách sử dụng các tùy chọn -Wall -pedantic
trong gcc.
'a', trong' a + 1' là gì? – GManNickG
Tôi cho rằng đó là một sai lầm b. Tôi có thể sai mặc dù ... – Pod
@GMan và @Pod: Đã chỉnh sửa! –